浮動小数点精度: 0.5 は正確で、0.1 は正確ではない理由
浮動小数点演算は多くの計算では効率的ですが、すべての 10 進数を正確に表現するには固有の制限に直面しています。 この記事では、0.5 が正確な表現を享受できる一方で、0.1 がそうでない理由を探ります。
0.1 の表現を理解する
IEEE 754 標準は、浮動小数点数の格納方法を規定しています。 0.1 の表現を調べてみましょう:
<code>s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm 0 01111011 10011001100110011001101</code>
仮数に 2-4 を掛けると、およそ 0.100000001490116119384765625 となります。 これは 0.1 に近似していますが、完全に一致するわけではありません。 バイナリ表現に固有の制限により、10 進数の 0.1.
からの完全な変換は妨げられます。0.5 の正確な表現
対照的に、0.5 は次のように単純に表現されます。
<code>s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm 0 01111110 00000000000000000000000</code>
これは 1 * 2-1 = 0.5 に変換され、完全な表現となります。
結論: 2 進精度の限界
違いは、特定の小数を正確に表現するバイナリ システムの機能にあります。 0.5 (1/2) は 2 のべき乗なので 2 進数で簡単に表現できますが、0.1 (1/10) はそうではありません。 これにより、0.1 を浮動小数点形式で格納するときにわずかな丸め誤差が発生し、近似値が観察されます。 プログラマーは、浮動小数点数や精度が重要なアプリケーションを扱う場合、この固有の制限に注意する必要があります。
以上が浮動小数点演算では 0.1 が正確に表現されないのに、0.5 は正確に表現されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。