• ベストアンサー

java 実数の割り算

javaで簡単な整数と実数での四則演算のプログラムを作りました。 整数での計算はint型で実数はdouble型で作りました。 数値を10と3(10.0と3.0)にしたのですが、 整数では 10/3=3  となり 実数では 10.0/3.0=3.3333333333333335 となりました。 この違いはなんなんでしょう? 整数のほうはなんとなくわかるのですが、実数のほうはさっぱり・・・ いろいろ聞きまわって、64ビットで有効桁数が・・とは聞いたのですが理解できず・・ 教えてください!!

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

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

「丸め誤差」というキーワードで検索して下さい。

その他の回答 (1)

回答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進数になっている理由はその方が計算を高速で行えるためです。

関連するQ&A