建设网站去哪里备案,网页源代码搜索关键字,学软件工程培训就业机构,博客网站开发利用数据库在Java中#xff0c;关键词strictfp用于声明一个方法、类或接口是严格遵守浮点数计算规范的。
具体作用包括#xff1a; 保证浮点数计算的结果在不同平台上是一致的#xff0c;避免由于浮点数计算的不精确性导致的结果不确定性。 指定了严格的浮点数计算规则#xff0c;禁…在Java中关键词strictfp用于声明一个方法、类或接口是严格遵守浮点数计算规范的。
具体作用包括 保证浮点数计算的结果在不同平台上是一致的避免由于浮点数计算的不精确性导致的结果不确定性。 指定了严格的浮点数计算规则禁止使用与IEEE 754标准不兼容的浮点数计算方式确保计算结果是可预测的。 限制了浮点数计算的精度和范围提高计算性能避免使用非严格模式下的复杂浮点数计算规则导致计算速度变慢。
需要注意的是strictfp关键词只能修饰方法、类或接口不能修饰变量。在类或接口上使用strictfp关键词会影响到所有该类或接口中的方法而在方法上使用strictfp关键词只会影响到该方法的浮点数计算。
下面我们来看一个案例
public strictfp static void testStrictfp() {System.out.println(255555555f - 255555554f);System.out.println(25555555f - 25555554f);System.out.println(1.7 - 1.6);double a 0.05;double b 0.01;double sum ab;System.out.println(sum);//这样的结果如果是在银行或者其他商业计算中出现那么结果是不能想像的。所以有严格的浮点计算。JAVA对这样的计算是封装在BigDecimal类中的。System.out.println(~~~~~~~~~~~~~~~~~~~~~~~~~~);//官方的例子double d 8e307;System.out.println(4.0 * d * 0.5);System.out.println(2.0 * d);//Double.MAX_VALUE大概是1.8e308}public static void main(String[] args) {testStrictfp();}
运行结果如下 扩展指数范围
体会一下也就是在某种情况下数字的范围不一样。并不限定于32位float和64位double了。
上面的计算结果可能就不是Infinity而是1.6E308或其他值。
一旦使用了strictfp来声明一个类、接口或者方法时
那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。IEEE-754到底是个什么东东呢
IEEE二进制浮点数算术标准IEEE 754是最广泛使用的浮点数运算标准
为许多CPU与浮点运算器所采用。 http://zh.wikipedia.org/wiki/IEEE_754\
大致意思是在一个FP-strict表达式中间的所有值必须是float或者double
这意味着运算结果也肯定是IEEE754中所规定的单精度和双精度数
也即是32位的float和64位的double。
这里也只说明了float和double的规定是符合IEEE754标准的。1.strictfp翻译为“精确的浮点”不够贴切容易引起误解。2.strictfp关键字的使用与IEEE754没有直接因果关系。IEEE 754是IEEE制定的而不是J2EE标准:)3.使用strictfp关键字的目的是保证平台移植之后浮点运算结果是一致的。