为什么strictfp会出现?

时间:2016-12-09 10:03:18

标签: java modifier strictfp

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

1 个答案:

答案 0 :(得分:1)

当james gosling和他的团队开发java时,平台独立性是首要任务。他们希望使橡木(Java)更好,以至于在具有不同指令集的任何机器上运行完全相同,甚至运行不同的操作系统。但它们是浮点运算的问题,即当计算 float double 值时,算法结果在不同的机器上是不同的(32/64位处理器架构) )由于精度。由于某些处理器的目标是效率(快速计算),如当时的奔腾处理器,而休息的目标是准确性(准确的结果),就像当时的旧处理器一样。

由于快速计算的处理器结束了精确值,但其他处理器没有,因此结果略有不同。而这种差异反对了 WORA 的java口号。因此,Java人员带有修饰符 strictfp ,它将浮点运算的结果限制为 IEEE-754 标准。

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