6

我们几乎都知道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说明符的方法返回的结果存在差异?

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

4

1 回答 1

0

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

于 2015-09-28T14:20:18.497 回答