fpstrict在Java中做了什么?

Yuv*_*dam 8 java floating-point

我阅读了修饰符JVM规范,fpstrict但仍然没有完全理解它的含义.

任何人都可以开导我吗?

Mic*_*rdt 11

基本上,它要求涉及受影响floatdouble变量的计算必须遵循IEEE 754规范,包括中间结果.

这具有以下效果:

  • 确保相同的输入始终在所有系统上生成完全相同的结果
  • CPU可能需要做一些额外的工作,使其稍慢
  • 在某些情况下,结果将不太准确(更不用说,在极端情况下)

编辑: 更具体地说,许多现代CPU在内部使用80位浮点运算("扩展精度").因此,它们可以在内部以非规范化形式表示某些数字,这些数字会导致32或64位浮点数的算术溢出或下溢(分别产生无穷大或零); 在临界情况下,80位只允许保持更高的精度.当这样的数字发生作为计算的中间结果,但具有能够通过32位/ 64位浮点数来表示的数字范围内的最终结果,则得到在使用80bit的浮子算术比机器的机器"更正确"结果不要 - 或者在使用的代码中strictfp.


hel*_*hod 6

我喜欢这个答案,这点很重要:

它确保您的计算在所有平台上都同样错误.