通过制作strictfp类或方法有什么用途?

时间:2013-05-03 05:49:05

标签: java floating-point

将类标记为strictfp意味着类中的任何方法代码都符合浮点数的IEEE 754标准规则。

这意味着什么?我真的不明白。

2 个答案:

答案 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不使用中间体。

http://en.wikipedia.org/wiki/Strictfp