ないJavaのstrictfpのは、関数呼び出しによって適用されます修飾子?

jvn91173:

strictfp修飾子とコールスタック内の関数が存在する場合より正確には、コールの上部にある機能は、スタックもstrictfpの指定子に付着しますか?

public class Main {

    // case 1: strictfp not present at top of call stack
    private static double bar1(double x) {
        return Math.sin(x);
    }

    strictfp private static double foo1(double x) {
        return bar1(x);
    }

    // case 2: strictfp present at top of call stack
    strictfp private static double bar2(double x) {
        return Math.sin(x);
    }

    strictfp private static double foo2(double x) {
        return bar2(x);
    }

    public static void main(String[] args) {
        double x = 10.0;
        System.out.println(foo1(x)); // -0.5440211108893698
        System.out.println(foo2(x)); // -0.5440211108893698
    }
}

この例では、foo1foo2同じ値を返すように見えます。機能がさらに下も修飾子を持っている場合、コールスタックの一番上にある機能はstrictfp修飾子を持っているかどうかを問題に似言い換えれば、それは見ていません。

これは常に当てはまるでしょうか?私はのために異なる値を選択した場合はx私は、正弦以外の浮動小数点演算を選択した場合は?

chrylis -on strike-:

JLS 15.4

式は定数式ではない場合、その式を含むすべてのクラス宣言、インターフェイス宣言、およびメソッド宣言を考えてみましょう。そのような宣言が負担場合strictfp修飾子(§8.1.1.3、§8.4.3.5、§9.1.1.2)を、次いで式はFP-厳密

[...]

表現ではないことを、次のFP厳密であれば、それは定数式ではなく、それが持っている任意の宣言内に表示されない場合にのみstrictfp修飾子を。

そのため、外部メソッドまたは浮動小数点表現を得るための他の方法への呼び出しはない「継承」コールスタックアップ何かの​​FP-厳しさを行います。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=229570&siteId=1