2011-12-22 8 views
-1

可能性の重複:!
Why can't decimal numbers be represented exactly in binary?なぜ0.1 * 3 = 0.3

私はthis質問を読んで(共産ダックの答えに)コメントでこれを見つけました。私は自分の心を失っていないことを確認した後、私は自分自身が好奇心を感じる。

なぜ0.1 * 3!= 0.3ですか?

(ノート、質問がゲーム開発に関するだったとされ、数学の分野、ゲーム開発者が精通している必要があり)

+0

複数の重複、SO質問の浮動小数点数の検索 – sdcvvc

答えて

3

THER理由は2の累乗の数字だけが単純なバイナリ表現で正確に表現することができるということです。

進数の個々の桁が2の異なるパワーであり、任意の数が2

0.1の異なるパワーの和が2の電源に対応していないと、異なるから合計することができないことですしたがって、それはある誤差でのみ表されることができる。 here

正確な数値が必要な場合は、ほとんどの場合整数を使用する必要があります。私は他の言語についてはわかりませんが、Javaでは、財務計算のように、精度が不可欠なアプリケーションでこの問題を克服するために設計されたクラスがいくつかあります。最も顕著なものはBigIntegerBigDecimal

1

です。これは、コンピュータが浮動小数点数を格納する方法であるIEEE 754に起因します。

この表現では、0.1は96ビット浮動小数点でも正確に表現できません。その点については0.3もありませんが、0.1が正確に表現できないため、3を掛けても0.3が正確に得られません。

関連する問題