提问人:fidudidu 提问时间:9/17/2019 最后编辑:Joachim Sauerfidudidu 更新时间:9/17/2019 访问量:81
不带 strictfp 的最小精度单位
Unit of least precision without strictfp
问:
看看 Math 类,ulp
方法:
public static float ulp(float f)
如果应用该方法,如下所示: ,则会出现 Javadoc 文档中的以下规则:Math.ulp(Float.MAX_VALUE)
如果参数为 ±Float.MAX_VALUE,则结果等于 2104。
能否确保从一台机器到另一台机器,即使浮点数不是 strictfp,这个数字 (2104) 也永远是那个数字?
答:
1赞
Joachim Sauer
9/17/2019
#1
缺乏并不能神奇地让你的数字做奇怪的事情。strictfp
它只是允许具有更高精度的平台以比实际结果更精确的精度执行计算(即,如果您进行计算,那么非代码实际上可能会使用 40 位浮点寄存器进行中间步骤)。float
strictfp
这不会改变您在代码中看到的输入和输出仍将始终为 .float
换句话说:不是变量或数字的属性。它是在浮点
型或双精度
型上运行的代码属性。strictfp
float
简而言之:是的,如果规范说将返回此数字,则将返回该数字。
评论
0赞
fidudidu
9/18/2019
事实上,strictfp 所做的不仅仅是强制执行标准用法。此外,根据 docs.oracle.com/javase/tutorial/java/nutsandbolts/... 浮点数和双精度基元数据类型都已经与IEEE 754兼容,这使得浮点数域返回预期和一致的结果。
评论