不带 strictfp 的最小精度单位

Unit of least precision without strictfp

提问人:fidudidu 提问时间:9/17/2019 最后编辑:Joachim Sauerfidudidu 更新时间:9/17/2019 访问量:81

问:

看看 Math 类,ulp 方法

public static float ulp(float f)

如果应用该方法,如下所示: ,则会出现 Javadoc 文档中的以下规则:Math.ulp(Float.MAX_VALUE)

如果参数为 ±Float.MAX_VALUE,则结果等于 2104

能否确保从一台机器到另一台机器,即使浮点数不是 strictfp,这个数字 (2104) 也永远是那个数字?

Java 点浮 点精度 数值分析 strictfp

评论


答:

1赞 Joachim Sauer 9/17/2019 #1

缺乏并不能神奇地让你的数字做奇怪的事情。strictfp

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

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

换句话说:不是变量或数字的属性。它是浮点型或双精度型上运行的代码属性。strictfpfloat

简而言之:是的,如果规范说将返回此数字,则将返回该数字。

评论

0赞 fidudidu 9/18/2019
事实上,strictfp 所做的不仅仅是强制执行标准用法。此外,根据 docs.oracle.com/javase/tutorial/java/nutsandbolts/... 浮点数和双精度基元数据类型都已经与IEEE 754兼容,这使得浮点数域返回预期和一致的结果。