0

クラスを strictfp としてマークすることは、クラス内のすべてのメソッド コードが浮動小数点に関する IEEE 754 標準規則に準拠することを意味します。

これはどういう意味ですか?私は本当にそれを取得しません。

4

2 に答える 2

3

一部のプロセッサには、わずかに正確な演算の機能があります。たとえば、64 ビットではなく 80 ビットです。同様に、一部のプロセッサではdouble、論理float演算が使用されている場合でも、演算を使用する方が高速な場合があります。たとえば、次のようになります。

float foo(float x, float y)
{
    x = x * 1.2345f;
    y = y * 2.3456f;
    return x * y;
}

ここで、中間演算は全体で 80 ビット演算を使用するように最適化される可能性があり、それが返されたときに 32 ビット値にフォールバックするだけです...ソース コードで説明されている各乗算の演算は理論的には 32 ビット乗算ですが。

を使用するstrictfpと、これらの潜在的な最適化がオフになります。必要になることはめったにありませんが、まったく同じ一連の算術演算 (まったく同じ入力セットが与えられた場合) が、実装に関係なくまったく同じ結果セットを与えることが保証されていることを意味します。

于 2013-05-03T05:52:44.940 に答える
2

精度がすべてです。

(IEEE 754) は、浮動小数点計算の技術標準です (wiki から)。

strictfp を使用しない場合、JVM 実装は、利用可能な追加の精度を自由に使用できます。

一部のアプリケーションでは、プログラマーは、より高い精度を処理できるプラットフォームであっても、すべてのプラットフォームで正確に同じ浮動小数点の動作を行う必要がある場合があります。ただし、このレベルの精度が必要ない場合、VM はデフォルトで中間体を使用しません。

http://en.wikipedia.org/wiki/Strictfp

于 2013-05-03T05:51:32.133 に答える