Java で「strictfp」キーワードを使用するのはいつですか? 質問する

Java で「strictfp」キーワードを使用するのはいつですか? 質問する

これが何をするのか調べてみましたが、strictfpJava でこのキーワードを実際に使用する例を持っている人はいますか? 実際にこれの用途を見つけた人はいますか?

すべての浮動小数点演算にこれを適用した場合、何か副作用はありますか?

ベストアンサー1

Strictfp を使用すると、どのプラットフォームでも浮動小数点計算からまったく同じ結果が得られます。strictfp を使用しない場合、JVM 実装は利用可能な場合は追加の精度を自由に使用できます。

JLSより:

FP 厳密な式では、すべての中間値は float 値セットまたは double 値セットの要素である必要があります。つまり、すべての FP 厳密な式の結果は、単精度形式と倍精度形式を使用して表されるオペランドに対する IEEE 754 演算によって予測される結果である必要があります。FP 厳密ではない式では、実装が拡張指数範囲を使用して中間結果を表すためにある程度の余裕が与えられます。大まかに言えば、最終的な効果は、float 値セットまたは double 値セットを排他的に使用するとオーバーフローまたはアンダーフローが発生する可能性がある状況で、計算によって「正しい答え」が生成される可能性があることです。

言い換えれば、Write-Once-Run-Anywhere が実際にはWrite-Once-Get-Equally-Wrong-Results-Everywhereを意味することを確認することです。

strictfp を使用すると、結果は移植可能になりますが、strictfp を使用しない場合は、結果が正確になる可能性が高くなります。

おすすめ記事