ホームページ >バックエンド開発 >C++ >浮動小数点加算が演算の順序に応じて異なる結果を生成するのはなぜですか?

浮動小数点加算が演算の順序に応じて異なる結果を生成するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-29 06:17:15600ブラウズ

Why Does Floating-Point Addition Produce Different Results Depending on the Order of Operations?

浮動小数点演算の結合性

浮動小数点演算は、コンピューティングにおいて実数を表すために使用されます。内部丸め誤差により、浮動小数点演算の結合性が疑わしい場合があります。

問題:

3 つの浮動小数点数を加算して比較する次のコードを考えてみましょう。それらの合計は 1 になります:

cout << ((0.7 + 0.2 + 0.1) == 1) << endl;     //output is 0
cout << ((0.7 + 0.1 + 0.2) == 1) << endl;     //output is 1

これらの式が異なる結果を生み出すのはなぜですか結果は?

答え:

浮動小数点加算は結合であることが保証されません。数値を加算する順序を変更すると、丸め誤差により結果が変わる可能性があります。

論文「すべてのコンピュータ科学者が浮動小数点演算について知っておくべきこと」によると、式の中のかっこも結果に影響を与える可能性があります。 。たとえば、次の式は異なる値を生成します:

(x+y)+z
x+(y+z)

x = 1e30、y = -1e30、z = 1。最初の式は 1 と評価され、2 番目の式は 0 と評価されます。

以上が浮動小数点加算が演算の順序に応じて異なる結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。