没有 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
变量或数字的 属性。它是在 float
或 double
上运行的 代码的 属性。
简而言之:是的,如果规范说这个号码会被退回,那么它就会被退回。
查看数学 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
变量或数字的 属性。它是在 float
或 double
上运行的 代码的 属性。
简而言之:是的,如果规范说这个号码会被退回,那么它就会被退回。