Java 关键字 strictfp

1.介绍

自Java2以来,Java语言增加了一个关键字strictfp,即 strict float point (精确浮点)。

strictfp 关键字可应用于类、接口或方法。

使用 strictfp 关键字声明一个方法时,该方法中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示。

在FP-strict表达式中,所有中间值必须是浮点值集或双值集的元素,这意味着所有FP严格表达式的结果必须是IEEE 754算法在使用单格式和双格式表示的操作数上预测的结果。在不是FP-strict的表达式中,为实现授予了一些余地,以使用扩展指数范围来表示中间结果; 粗略地说,净效应是在独占使用浮点值集或双值集可能导致上溢或下溢的情况下,计算可能会产生“正确答案”。

----JLS

换句话说,它是关于确保Write-Once-Run-Anywhere实际上意味着Write-Once-Get-Equally-Werong-Results-Everywhere

使用strictfp,您的结果是可移植的,没有它,它们更可能是准确的。

2.实例

/**
 * strictfp关键字,基本不用
 * 跨平台时可能需要用
 * 输出0.13456724768173828
 */
private static strictfp void strictfpTest(){
    float aFloat = 0.123456f;
    double bDouble = 0.0111112464;
    double sum = aFloat + bDouble;
    System.out.println(sum);
}

猜你喜欢

转载自www.cnblogs.com/huaranmeng/p/12770931.html