strictfp

Strictfp —— Java 关键字。

strictfp, 即 strict float point (精确浮点)。

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

如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,可以用关键字strictfp.

示例 1 下面的示例演示了一个使用 strictfp 修饰符声明的类。

// Example of precision control with strictfp

public strictfp class MyClass

{

public MyClass(){}

public static void main(String[] args)

{

float aFloat = 0.6710339f;

double aDouble = 0.04150553411984792d;

double sum = aFloat + aDouble;

float quotient = (float)(aFloat / aDouble);

System.out.println("float: " + aFloat);

System.out.println("double: " + aDouble);

System.out.println("sum: " + sum);

System.out.println("quotient: " + quotient);

}

}

示例输出

float: 0.6710339

double: 0.04150553411984792

sum: 0.71253945297742238

quotient: 16.1673355

示例 2

下面的示例演示了一个使用 strictfp 修饰符声明的方法。

// Example of precision control with strictfp:

public class MyClass2

{

public float aFloat;

public double aDouble;

public MyClass2(){}

public strictfp double add(float a, double b)

{

return (a + b);

}

public static void main(String[] args)

{

MyClass2 myClass2 = new MyClass2();

myClass2.aFloat = 0.6710339f;

myClass2.aDouble = 0.04150553411984792d;

double sum = myClass2.add(myClass2.aFloat, myClass2.aDouble);

System.out.println("float: " + myClass2.aFloat);

System.out.println("double: " + myClass2.aDouble);

System.out.println("sum: " + sum);

}

}

示例输出

float: 0.6710339

double: 0.04150553411984792

sum: 0.71253945297742238

你可能感兴趣的:(FP)