我们都几乎知道 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 说明符的情况下,方法返回的结果有所不同吗?

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

最佳答案

您会得到一个数字,该数字可以精确地代表 double 型:Double.MIN_VALUE;因此,没有区别也就不足为奇了。如果使用产生不能保留其精度的数字的算术,则相同的算术可以产生两个不同的结果。在这种情况下,strictfp将起作用,其中JVM两次都以相同的方式近似估算答案。

关于java - 对strictfp敏感的JVM的示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14512044/

10-09 03:38