• ベストアンサー

2進数の小数計算について

コンピュータは0と1の2進数で計算しますが、小数点の計算は苦手だと聞いています。 実際、消費税の0.05を2進数で表現することは出来ません。では、どうやってコンピュータで小数点の計算しているのですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

一般的には、ある程度の誤差を承知の上で、近似値を使って計算します。Microsoft Excel などのソフトはこの方法を使っています。誤差が出ても四捨五入などで誤差を隠すことができるので、実用上は問題ありません。 (例: 10.00000003 → 10) 誤差のない正確な計算をしなければならないときは、分数に直します。 (例: 0.05 → 5/100) これなら整数同士の計算だけで済むので誤差は出ません。 実際にこの方法を使う場合は、分母を一定の値に固定して分子だけを処理するなどの工夫をします。 例えば 12.34 + 3.5 = 15.84 は分母を100に固定して分子のみを計算すると 1234 + 350 = 1584 というようになります。(固定小数点方式)

yukikundesuyo
質問者

お礼

固定小数点方式を調べて納得いきました。 ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

近似値で計算します。 たとえば、我々が1/3を数値として計算する場合、 1/3→約0.3333とおきかえて計算します。 それでもあまり実用的には問題ありません。 0.05を2進数で表せば0.0000110011001100....と循環小数になりますが、 適当なところで切って表現します。 たとえば0.0000110011ぐらい…。 (実際の処理系では、どのくらいのビットで数を表現するかは、 IEEE754という規格で決まっています) コンピュータ内部で計算する場合はこの適当なところで切った数を使っています。 最後に10進法に戻します。

すると、全ての回答が全文表示されます。
回答No.1

仮想的な小数点を想定して計算することができます。 例えば、8bitで小数を表すとして、上位4bitで整数部分、下位4bitで小数部分を表すとします。 このとき、各桁の値は8bit目から順に、 2^3,2^2,2^1,2^0,2^-1,2^-2,2^-3,2^-4 となります。 つまり、仮想的な小数点が4bit目と5bit目の間にあると考えた場合、 00010100 は、 2^0+2^-2=1.25 となります。 bitうんぬんの話が良くわからなかったら、2進数少数は 1.01 といった形で表し、この値は 2^0+2^-2 で計算するものだと理解してください。 この方法は固定小数点といって、プログラムなんかで使おうと思うと結構めんどくさいです。 c言語の数値型には浮動小数といったものが出てきますが、これは計算機のbit幅によってフォーマットが決まっており、2進数の数字列の中に、仮数、基数、指数を与えることで小数を扱っています。 こんな感じでよろしかったでしょうか? 詳しくは参考URLを見てください。

参考URL:
http://white.sakura.ne.jp/~rryu/compfund/
yukikundesuyo
質問者

お礼

C言語の浮動小数(float型)の内部構造はそういう風になっていたのははじめて知りました。ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A