我已经查过它的作用,但实际上有没有人举例说明您何时会在 Java 中使用 strictfp
关键字?有没有人真的找到了这个用途?
将它放在我所有的浮点运算上会有任何副作用吗?
原文由 GBa 发布,翻译遵循 CC BY-SA 4.0 许可协议
我已经查过它的作用,但实际上有没有人举例说明您何时会在 Java 中使用 strictfp
关键字?有没有人真的找到了这个用途?
将它放在我所有的浮点运算上会有任何副作用吗?
原文由 GBa 发布,翻译遵循 CC BY-SA 4.0 许可协议
实际上, 维基百科上有一篇关于 strictfp 的好文章,其中包含指向 Java 规范中有关 浮点类型、格式和值 的部分 的链接。
从字里行间可以看出,如果您未指定 strictfp
,则 JVM 和 JIT 编译器有权根据需要进行浮点计算。为了提高速度,他们很可能会将计算委托给您的处理器。 strictfp
后,计算必须符合 IEEE 754 算术标准,这实际上可能意味着 JVM 将执行计算。
那么你为什么要使用 strictfp
?我可以看到的一个场景是在分布式应用程序(或多人游戏)中,无论底层硬件或 CPU 是什么,所有浮点计算都需要是确定性的。权衡取舍是什么?最有可能的执行时间。
原文由 MattK 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
Strictfp 确保您在每个平台上从浮点计算中获得完全相同的结果。如果您不使用 strictfp,JVM 实现可以自由使用可用的额外精度。
来自 JLS :
换句话说,它是关于确保 Write-Once-Run-Anywhere 实际上意味着 Write-Once-Get-Equally-Wrong-Results-Everywhere 。
使用 strictfp 你的结果是可移植的,没有它它们更可能是准确的。