将类标记为strictfp意味着类中的任何方法代码都符合浮点数的IEEE 754标准规则。
这意味着什么?我真的不明白。
答案 0 :(得分:3)
某些处理器具有稍微更准确算术的功能 - 例如80位而不是64位。同样在某些处理器上,即使使用逻辑double
算术,使用float
算术也可能更快。例如:
float foo(float x, float y)
{
x = x * 1.2345f;
y = y * 2.3456f;
return x * y;
}
这里可以优化中间操作以在整个过程中使用80位算术,只有在返回时才回退到32位值...即使每个乘法的源代码中描述的操作理论上是32-位乘法。
当您使用strictfp
时,您会关闭这些潜在的优化。这很少是必要的,但这意味着你可以保证完全相同的算术运算集 - 当给定完全相同的输入集时 - 将给出完全相同的结果集,无论实现如何。
答案 1 :(得分:2)
全部关于精确度。
(IEEE 754)是浮点计算的技术标准(来自wiki)
如果不使用strictfp,JVM实现可以在可用时自由使用额外的精度。
对于某些应用程序,程序员可能需要每个平台都具有完全相同的浮点行为,即使在可以处理更高精度的平台上也是如此。但是,如果不需要此级别的精度,则默认情况下VM不使用中间体。