码迷,mamicode.com
首页 > 编程语言 > 详细

Java strictfp关键字

时间:2020-05-22 19:26:47      阅读:46      评论:0      收藏:0      [点我收藏+]

标签:避免   移植   语言   浮点   算术运算   public   增加   机器   并且   

  可移植性是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关键字

标签:避免   移植   语言   浮点   算术运算   public   增加   机器   并且   

原文地址:https://www.cnblogs.com/raisins/p/12938920.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!