更准确地说,如果调用堆栈中存在一个带有 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
怎么办?如果我选择正弦以外的浮点运算怎么办?