- ベストアンサー
浮動小数点の計算について
- 浮動小数点数の計算における誤差の原因とは?
- Javaで浮動小数点の計算を行うと誤差が生じる理由
- 浮動小数点数の誤差を詳しく解説します
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
浮動小数点数は、2進数で表現されているので、2のべき乗の和しか正確に表現できません。 任意の整数は2のべき乗の和で表現できるので、有効桁数の範囲では正確に表現できます。 少数部分は、1/2, 1/4, 1/8, 1/16, 1/32,....... からいくつか選んだ和であれば、有効桁数の範囲では正確に表現できます。 0.1や0.2は、2進数では無限小数になるので、有限桁で切ると必ず誤差が生じます。
その他の回答 (3)
簡単に説明すると、コンピュータの計算は全て『スイッチのオンとオフ』で扱われています。 つまり、いくら高速で計算しているとはいえ、結局は有限個の桁数までしか計算できず、どこかで四捨五入して表示しているのです。 もう少し的確に言えば、少数計算は負荷がかかるため、多くのコンピュータには予め、少数計算用のチップが組み込まれています。 そのチップには、少数は何bitで扱えば速く計算できるというのが決められており、その桁数までしか計算されないので、そのようなことが起こります。(これを丸め誤差といいます) 一応アルゴリズムを考えれば、何桁まででも計算できるのですが、実用的な桁数までで止めているのです。
- FEX2053
- ベストアンサー率37% (7991/21370)
一言でいえば 「0.1は2進数で表現できない」 からです。 2進数は2のn乗の組み合わせで数を表現します。 これが整数なら10のn乗の組み合わせと1対1になるんですが、 小数点以下は2の-n乗=2の1/n乗の組み合わせになります。 すなわち 2の-1乗=1/2=0.5 2の-2乗=1/4=0.25 2の-3乗=1/8=0.125 : これ、どう組み合わせても0.1にならないのは自明ですよね。 0.1と表示してても、0.1でない数字で計算するんですから、 結果がずれるのは当たり前です。 Excelは、そういう一種の「欠陥」と引き換えに、大容量の計算を 一瞬でこなすという「メリット」を得ているんですよ。
- t_ohta
- ベストアンサー率38% (5231/13685)
このあたりを読まれてみるといいかと思います。 http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml