看看数学课,ulp
method :
public static float ulp(float f)
如果应用该方法的方式如下:Math.ulp(Float.MAX_VALUE)
,则会出现 Javadoc 文档中的这条规则:
If the argument is ±Float.MAX_VALUE, then the result is equal to 2104.
能否确保从一台机器到另一台机器,这个数字 (2104) 始终是那个数字,即使 float 不是 strictfp?
最佳答案
缺乏strictfp
不会神奇地让你的数字做奇怪的事情。
它只是允许更精确的平台执行比结果实际拥有的更精确的计算(即,如果您在 float
上进行计算,那么非 strictfp
代码实际上可能会使用 40 位浮点寄存器作为中间步骤)。
这不会改变您在代码中看到的输入和输出仍然始终是 float
的事实。
换句话说:strictfp
不是 float
变量或数字的属性。它是在 float
或 double
上运行的代码的属性。
简而言之:是的,如果规范说要返回这个数字,那么它就会被返回。
关于java - 无 strictfp 的最小精度单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57972340/