Java strictfp关键字
2021-01-15 03:13
标签:避免 移植 语言 浮点 算术运算 public 增加 机器 并且 可移植性是Java语言的设计目标之一,无论在哪个虚拟机上运行,同一运算应该得到同样的结果3对于浮点数的算术运算,实现这样的可移植性是相当困难的。double类型使用64位存储一个数值,而有些处理器使用80位浮点寄存器这些寄存器增加了中间过程的计算精度。 例如,double w = x * y / z; 很多 Intel 处理器计算 x * y,并且将结果存储在80 位的寄存器中 , 再除以 z 并将结果截断为 64 位 „ 这样可以得到一个更加精确的计算结果 , 并且还能够避免产生指数溢出 。 但是,这个结果可能与始终在 64 位机器上计算的结果不一样 。 因此,Java虚拟机的最初规范规定所有的中间计算都必须进行截断。 但是这种行为遭到了数值计算团体的反对。截断计算不仅可能导致溢出,而且由于截断操作需要消耗时间,所以在计算速度上实际上要比精确计算慢。为此,Java程序设计语言承认了最优性能与理想结果之间存在的冲突,并给予了改进。在默认情况下,虚拟机设计者允许对中间计算结果采用扩展的精度。但是,对于使用 strictfp关键字标记的方法必须使用严格的浮点计算来生成可再生的结果。例如,可以把 main 方法标记为 这样在main 方法中的所有指令都将使用严格的浮点计算。如果将一个类标记为strictfp , 这个类中的所有方法都要使用严格的浮点计算。但实际的计算方式将取决于 Intel 处理器的行为 。 Java strictfp关键字 标签:避免 移植 语言 浮点 算术运算 public 增加 机器 并且 原文地址:https://www.cnblogs.com/raisins/p/12938920.htmlpublic static strictfp void main (String[] args){ }
下一篇:【算法】线段树