strictfp敏感JVM的示例

时间:2013-01-24 22:32:16

标签: java

我们都非常了解 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的方法返回的结果存在差异说明符?

我尝试了几种组合,但没有区别。

1 个答案:

答案 0 :(得分:0)

你得到一个双精度可以准确表示的数字:Double.MIN_VALUE;所以我没有惊讶,没有区别。如果使用产生无法保持其精度的数字的算术,则相同的算法可以产生两种不同的结果。 strictfp可以在这种情况下工作,其中JVM两次都以相同的方式逼近答案。