より正確には、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
か? 正弦以外の浮動小数点演算を選択するとどうなりますか?