在double计算中,为什么要有strictfp关键字呢,能不能给我解释一下有关溢出的问题啊,谢谢

解决方案 »

  1.   

    噢,LZ是这样的。strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。
      

  2.   


    胡说,你加不加 strictfp 关键字 JVM 都严格按 IEEE754 规范作浮点运算。strictfp 顾名思义,严格的浮点运算模式,有些 CPU 会使用超过 64 位的寄存器存放浮点运算的中间结果,目的就一个:使表达式的最终运算结果更精确,但这个更精确的结果和只采用标准的 64 位寄存器的 CPU 算出的结果有可能有非常细微的差异。加上 strictfp 后 JVM 会在每步浮点运算后强制把临时的计算结果截取到64位目的是使在所有 CPU 上都得到完全一致的计算结果,但这样会在某些 CPU 上多耗费些计算时间(浪费在截取上),所以很少需要用到 strictfp 这个关键字,除非遇到对运算结果的一致性要求及其变态的应用。