ホームページ > バックエンド開発 > C++ > 浮動小数点演算で 0.1 が 0.1 に等しくないのはなぜですか?

浮動小数点演算で 0.1 が 0.1 に等しくないのはなぜですか?

Barbara Streisand
リリース: 2025-01-15 08:49:46
オリジナル
918 人が閲覧しました

Why Doesn't 0.1 Equal 0.1 in Floating-Point Arithmetic?

浮動小数点数: 0.1 とそのコンピュータ表現の間の矛盾を理解する

浮動小数点演算はコンピューター サイエンスの基本ですが、0.1 などの数値を格納する方法は直感に反する場合があります。 この説明は表現プロセスを明確にします。

IEEE 754 標準では、浮動小数点数が符号ビット、指数、仮数で構成されることが規定されています。 0.1 のバイナリ表現を調べてみましょう:

<code>0 | 01111011 | 10011001100110011001101</code>
ログイン後にコピー

内訳は次のとおりです:

  • 符号: 0 (正)
  • 指数 (バイアス): 123 (123 - 127 バイアス = -4)
  • 仮数: 1.0011001100110011001101 (1 プラス小数部)

指数は 2-4 の乗算を表します。仮数は小数部分を表します。 これらのコンポーネントを追加すると、約 1.60000002384185791015625 となります。 2-4 を掛けると 0.100000001490116119384765625 となり、0.1 に近い近似になります。

10 進数表現も同様のパターンに従います。たとえば、0.8125 は次のように保存されます:

<code>0 | 01111110 | 10100000000000000000000</code>
ログイン後にコピー
  • 符号: 0 (正)
  • 指数 (バイアス): 126 (126 - 127 バイアス = -1)
  • 仮数: 1.101 (整数部と小数部)

指数は、2-1の乗算を示します。仮数 1.101 は 13/8 に相当します。 したがって、13/8 * 1/2 = 0.8125.

この詳細な表現は、0.1 のような一見単​​純な 10 進数がわずかに異なる浮動小数点相当値を持つ理由を明らかにしています。このわずかな不正確さはシステムに固有のものであり、コンピューター システム内の数値計算を理解する上で非常に重要です。 この方法により、計算の精度と効率が保証されます。

以上が浮動小数点演算で 0.1 が 0.1 に等しくないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート