Java strictfp关键字

Posted 不皮的皮卡丘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java strictfp关键字相关的知识,希望对你有一定的参考价值。

  可移植性是Java语言的设计目标之一,无论在哪个虚拟机上运行,同一运算应该得到同样的结果3对于浮点数的算术运算,实现这样的可移植性是相当困难的。double类型使用64位存储一个数值,而有些处理器使用80位浮点寄存器这些寄存器增加了中间过程的计算精度。

  例如,double w = x * y / z; 很多 Intel 处理器计算 x * y,并且将结果存储在80 位的寄存器中 , 再除以 z 并将结果截断为 64 位 „ 这样可以得到一个更加精确的计算结果 , 并且还能够避免产生指数溢出 。 但是,这个结果可能与始终在 64 位机器上计算的结果不一样 。 因此,Java虚拟机的最初规范规定所有的中间计算都必须进行截断。

  但是这种行为遭到了数值计算团体的反对。截断计算不仅可能导致溢出,而且由于截断操作需要消耗时间,所以在计算速度上实际上要比精确计算慢。为此,Java程序设计语言承认了最优性能与理想结果之间存在的冲突,并给予了改进。在默认情况下,虚拟机设计者允许对中间计算结果采用扩展的精度。但是,对于使用 strictfp关键字标记的方法必须使用严格的浮点计算来生成可再生的结果。例如,可以把 main 方法标记为

public static strictfp void main (String[] args){ }

这样在main 方法中的所有指令都将使用严格的浮点计算。如果将一个类标记为strictfp , 这个类中的所有方法都要使用严格的浮点计算。但实际的计算方式将取决于 Intel 处理器的行为 。

以上是关于Java strictfp关键字的主要内容,如果未能解决你的问题,请参考以下文章

Java中的strictfp关键字

Java中的strictfp关键字

Java中的strictfp关键字

java中的strictfp的作用

Java strictfp

Java strictfp关键字