我们都非常了解 strictfp 的工作原理。
这样的事情:
package com.hk.basicjava.tests.strictfp;
import java.util.*;
public class StrictFP {
public static void main(String[] argv) {
double d = Double.MIN_VALUE;
System.out.println("non strictfp : " + notStrictFP(d)); // may be 4.9E-324
System.out.println("strictfp : " + strictFP(d)); // should be 0
}
static double notStrictFP(double a) {
return (a / 2 ) * 2;
}
static strictfp double strictFP(double a) {
return (a / 2 ) * 2 ;
}
}
但是,是否有人知道特定硬件/操作系统(以及可能是JRE)组合,其中使用和不使用 strictfp的方法返回的结果存在差异说明符?
我尝试了几种组合,但没有区别。
答案 0 :(得分:0)
你得到一个双精度可以准确表示的数字:Double.MIN_VALUE;所以我没有惊讶,没有区别。如果使用产生无法保持其精度的数字的算术,则相同的算法可以产生两种不同的结果。 strictfp可以在这种情况下工作,其中JVM两次都以相同的方式逼近答案。