- ベストアンサー
java 実数の割り算
javaで簡単な整数と実数での四則演算のプログラムを作りました。 整数での計算はint型で実数はdouble型で作りました。 数値を10と3(10.0と3.0)にしたのですが、 整数では 10/3=3 となり 実数では 10.0/3.0=3.3333333333333335 となりました。 この違いはなんなんでしょう? 整数のほうはなんとなくわかるのですが、実数のほうはさっぱり・・・ いろいろ聞きまわって、64ビットで有効桁数が・・とは聞いたのですが理解できず・・ 教えてください!!
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「丸め誤差」というキーワードで検索して下さい。
その他の回答 (1)
- noboru2000
- ベストアンサー率33% (47/140)
回答No.2
内部は2進数だからです。つまり、0.5, 0.25, 0.125 などの2で割って行った値とそれを加えた値(0.5+0.25=0.75など)以外は2進数的に「丁度ピッタリ」な数にならないということです。たとえば10進数の0.1は2進数だと0.00011001100110011...という循環小数になります(そのため0.1を100回足す計算をしても10になりません。下の方の桁で四捨五入などをして桁を切り詰めれば"10"と表示することはできますが)。ということで実数計算は常に誤差が出るものだと思って下さい。 内部が2進数になっている理由はその方が計算を高速で行えるためです。