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

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

Barbara Streisand
リリース: 2024-12-29 06:17:15
オリジナル
598 人が閲覧しました

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 サイトの他の関連記事を参照してください。

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