1

我一直阅读strictfp将浮点计算限制为IEEE-754标准,但从未读过为什么他们需要根据该标准限制计算结果?

4

1 回答 1

1

当 james gosling 和他的团队开发 java 时,平台独立性是首要任务。他们想让 Oak(Java) 变得更好,以至于它可以在任何具有不同指令集的机器上运行完全相同,甚至运行不同的操作系统。但是它们是浮点运算的一个问题,即在计算浮点精度值时,由于精度的原因,不同机器(32/64 位处理器架构)的运算结果不同。由于某些处理器的构建目标是效率(快速计算),如当时的奔腾处理器,而其余的则目标是准确性(准确的结果),如当时的旧处理器。

由于为快速计算而苦苦挣扎的处理器对精度值进行了四舍五入,但其他处理器没有,因此结果略有不同。而这种差异与WORA的 java 口号背道而驰。因此,Java 人带来了修饰符strictfp,它将浮点运算的结果限制为IEEE-754标准。

Strictfp 确保我们从每个平台上的浮点计算中获得完全相同的结果。如果我们不使用 strictfp,JVM 实现可以自由地在可用的情况下使用额外的精度。这意味着如果我们不指定strictfp,那么JVMJIT编译器就可以根据需要计算我们的浮点计算。为了速度,他们很可能会将计算委托给我们的处理器。但是使用strictfp on,计算必须符合 IEEE 754 算术标准,这在实践中可能意味着 JVM 将执行计算,从而可以在任何机器上获得相同的浮点算术结果。

于 2016-12-09T10:13:08.653 回答