黑马程序员技术交流社区

标题: 关于java中 顶一个关键字的问题? [打印本页]

作者: 潘廖明    时间: 2013-5-26 23:00
标题: 关于java中 顶一个关键字的问题?
strictfp能够用通俗点的意思解释下这个词的意思?或者取个列子说明下由于没有的差别在哪里?

作者: clp    时间: 2013-5-26 23:36
strictfp, 即 strict float point (精确浮点)。如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,可以用关键字strictfp.
strictfp 关键字可应用于类、接口或方法。使用 strictfp 关键字声明一个方法时,该方法中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示。

下面的示例演示了一个使用 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


作者: 潘廖明    时间: 2013-5-26 23:52
clp 发表于 2013-5-26 23:36
strictfp, 即 strict float point (精确浮点)。如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平 ...

这样看不出结果啊!没有比较的对象!
作者: 潘廖明    时间: 2013-5-26 23:57
clp 发表于 2013-5-26 23:36
strictfp, 即 strict float point (精确浮点)。如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平 ...

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

你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2