0

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

这是什么意思?我真的不明白。

4

2 回答 2

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,您会关闭那些潜在的优化。很少有必要,但这意味着您可以保证完全相同的算术运算集 - 当给定完全相同的输入集时 - 无论实现如何,都会给出完全相同的结果集。

于 2013-05-03T05:52:44.940 回答
2

一切都与精度有关。

(IEEE 754)是浮点计算的技术标准(来自 wiki)

如果您不使用 strictfp,JVM 实现可以在可用的情况下免费使用额外的精度。

对于某些应用程序,程序员可能需要每个平台都具有完全相同的浮点行为,即使在可以处理更高精度的平台上也是如此。但是,如果不需要此级别的精度,则 VM 默认情况下不使用中间值。

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

于 2013-05-03T05:51:32.133 回答