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
}
}
この例では、foo1
とfoo2
同じ値を返すように見えます。機能がさらに下も修飾子を持っている場合、コールスタックの一番上にある機能はstrictfp修飾子を持っているかどうかを問題に似言い換えれば、それは見ていません。
これは常に当てはまるでしょうか?私はのために異なる値を選択した場合はx
?私は、正弦以外の浮動小数点演算を選択した場合は?
chrylis -on strike-:
式は定数式ではない場合、その式を含むすべてのクラス宣言、インターフェイス宣言、およびメソッド宣言を考えてみましょう。そのような宣言が負担場合
strictfp
修飾子(§8.1.1.3、§8.4.3.5、§9.1.1.2)を、次いで式はFP-厳密。[...]
表現ではないことを、次のFP厳密であれば、それは定数式ではなく、それが持っている任意の宣言内に表示されない場合にのみ
strictfp
修飾子を。
そのため、外部メソッドまたは浮動小数点表現を得るための他の方法への呼び出しはない「継承」コールスタックアップ何かのFP-厳しさを行います。