ホームページ >バックエンド開発 >C++ >浮動小数点演算は結合的ですか?

浮動小数点演算は結合的ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-08 04:47:09377ブラウズ

Is Floating-Point Arithmetic Associative?

浮動小数点演算の結合性

浮動小数点演算は科学計算で広く採用されていますが、奇妙な疑問が生じます。加算と乗算の結合?この一見単純なクエリには、隠れた複雑さが潜んでいます。

浮動小数点加算の領域では、結合性が常に保証されているわけではありません。顕著な例は次のコードです:

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

驚いたことに、これら 2 つのステートメントは異なる結果を生成します。なぜそうなるのでしょうか?

その説明は、浮動小数点表現の制限にあります。浮動小数点数は実際の値の近似値として保存されるため、ある程度の不正確さが生じます。複数の浮動小数点値を加算する場合、蓄積された誤差と丸めのため、演算の順序が重要になります。

参照されている標準論文「浮動小数点演算についてすべてのコンピュータ科学者が知っておくべきこと」には、適切に次のように記載されています。

「丸め誤差のため、代数の結合法則は浮動小数点数には必ずしも当てはまりません。」

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

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