浮動小数点演算の結合性
浮動小数点演算は科学計算で広く採用されていますが、奇妙な疑問が生じます。加算と乗算の結合?この一見単純なクエリには、隠れた複雑さが潜んでいます。
浮動小数点加算の領域では、結合性が常に保証されているわけではありません。顕著な例は次のコードです:
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 サイトの他の関連記事を参照してください。