dポイントプレゼントキャンペーン実施中!

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

A 回答 (2件)

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

    • good
    • 0

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

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