問題ステートメント:
場合によっては、以下を使用してコーディングします。浮動小数点計算では、最適化が有効な場合と無効な場合とで異なる結果が生成される場合があります。これは、最適化が計算の精度に影響を与えると思われる二重変数の場合に特に観察されます。
分析:
この問題は、次の内部処理が原因で発生します。 Intel x86 プロセッサの浮動小数点値。これらのプロセッサは内部で 80 ビット拡張精度を使用しますが、double 変数は通常 64 ビット レジスタに格納されます。最適化が有効な場合、コンパイラはパフォーマンスを向上させるために浮動小数点値をレジスタに格納するようにコードを最適化することがあります。ただし、この最適化により、値が 80 ビット拡張精度レジスタから 64 ビット レジスタに転送されるときに丸め誤差が発生する可能性があります。
解決策:
解決するにはこの問題には、いくつかのオプションがあります:
さらなる考慮事項:
結論:
浮動小数点で観察された不一致最適化の結果は必ずしもコンパイラのバグではなく、Intel x86 プロセッサの内部浮動小数点処理の結果です。提供されたソリューションを採用することで、開発者は、最適化設定に関係なく、浮動小数点計算で一貫した結果が得られるようにすることができます。
以上が最適化によって倍精度浮動小数点の計算が変化するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。