プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

勉強のため、電卓を作ってみようと思っています。
基本的なことは解っているのですが、一つ問題があります。

99999999999.99999999
等の様な、intにもdoubleにも入らないような値を扱えるような
電卓は作成可能でしょうか。

機能的には四則演算程度しかさせないのですが、数を
広い範囲で扱えるようなものを作りたいのです。

windowsに付属しているように、数の大きな電卓を作成する
対策法を教えてください。


よろしくお願いいたします。

A 回答 (5件)

やったことはありませんが…


いわゆる「多倍長精度演算」でしょうか?

http://ja.wikipedia.org/wiki/%E4%BB%BB%E6%84%8F% …

.NET Framework 4.0以降であれば、そういう型も用意されている…ようです。
http://d.hatena.ne.jp/matsukawar/20120527/133809 …
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございます。

私も、示していただいたようなクラス(型)は知りませんでした。

早速試してみたいと思います。

ありがとうございました。

お礼日時:2014/06/17 13:25

はじめまして、通りすがると申します。

私も同じようなものを作ったことあります。
私の場合は、自力でロジックを考えました。ただ、C#ではなくVB.NETにて作りました。
考え方は、数字を文字列として受け取り、それを4桁ずつ区切って、区切った文字をintegerにキャストすます。
キャストした数値は、内部的に加減乗算し、その結果を後で結合していく方式です。
結合時といっても、単純に結合するのではなく、4桁で桁あふれ等が起きた場合、左右隣の数値に1加える
か、減算するかを判断して結合していきます。加減のロジックができれば、乗算はそれらを利用して算定する
方式です。この方式はノートなどで手動で計算するようなイメージのロジックになると思います。
vb.netだと200~300ステップぐらいで作成した記憶があります。C#だともう少し多くのソースを必要とする
かもしれません。考え方は色々とあるとおもいますがこれも一つの例としてとらえてください。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

思った以上にいろいろな方法があるので、正直驚きました。

電卓を作るといっても、敷き詰めていけばきりがなくなってしまいそうです。

ただ、考え方としては、通りさんの方法だと、少し凝った、面白いものも
作れそうです。

試行錯誤してみます。

ありがとうございました。

お礼日時:2014/06/19 13:18

たびたびごめんなさい


少し余計なアドバイス、
別に、整数部小数部に分ける必要は特にないです→計算時は整数にして計算後に小数点の位置を後から割り出せばいいので
掛け算割り算は加(減)算(減算はマイナス値を加算するということ)にして計算する(掛け算は掛ける分加算する、割り算は何回引けるかカウントする)→コンピューター内部ではハード的には加算器しかないのですがそれを真似る
そろばんのイメージで設計すればいいと思います
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

なるほど、自作して実装というのもありましたね。

組み込みなんかである、『フルアダー』のことですね。

アクセサリの電卓程度でと思っていましたが、よくよく見てみると、
欲を張りすぎたと思いました。

参考にさせていただきます。

ありがとうございました。

お礼日時:2014/06/18 13:04

有限の桁数ならあらかじめ整数部分と小数部分の各桁数分の配列をCHAR(1バイト)で用意してやって


一桁(あるいは2桁:BCDってやつ→昔のMSX-BASICなんかそうだったと思う)一変数で処理してやれば何桁でも好きなだけ設定できると思います
処理効率は悪いけど、除算以外での丸め誤差が出ないから、0.001を1万回足せばちゃんと10になるはず
    • good
    • 0

どれくらいの桁数が欲しいのかよくわかりませんが、


decimal型を使う手もあります。

http://msdn.microsoft.com/ja-jp/library/364x0z75 …
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

まねをしたくて…というわけではありませんが、希望桁数は
windows付属の電卓と同じだけを望んでいます。

比較してみると、教えていただいたdecimal型でも
何とかなるのかもしれません。

試してみたいと思います。


ありがとうございました。

お礼日時:2014/06/17 13:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!