没有 strictfp 的最小精度单位

Unit of least precision without strictfp

查看数学 class,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) 永远是那个数字,即使浮点数不是 strictfp?

缺少 strictfp 不会神奇地让您的数字做出奇怪的事情。

它只是允许精度更高的平台执行比实际结果更精确的计算(即,如果您在 float 上进行计算,那么非 strictfp 代码实际上可能使用 40-用于中间步骤的位浮点寄存器)。

这不会改变您在代码中看到的输入和输出仍将始终为 float 的事实。

换句话说:strictfp 不是 float 变量或数字的 属性。它是在 floatdouble 上运行的 代码的 属性。

简而言之:是的,如果规范说这个号码会被退回,那么它就会被退回。