黑马程序员技术交流社区
标题:
i != i 你信么,反正我信了
[打印本页]
作者:
张东贤
时间:
2013-3-21 19:42
标题:
i != i 你信么,反正我信了
可以让i!=i吗?神马东西自己都不等于它自己?什么数据用Java语言都无法表示出来?
当你看到这个命题的时候一定会以为我疯了,或者Java语言疯了。这看起来是绝对不可能的,一个数怎么可能不等于它自己呢?或许就真的是Java语言疯了,不信看下面的代码输出什么?
double i=0.0/0.0;
if(i==i){
System.out.println(“Yes i==i”);
}else{
System.out.println(“No i!=i”);
}
上面的代码输出”No i!=i”,为什么会这样呢?关键在0.0/0.0这个值,在IEEE 754浮点算术规则里保留了一个特殊的值用来表示一个不是数字的数量。这个值就是NaN(“Not a Number”的缩写),对于所有没有良好定义的浮点计算都将得到这个值,比如:0.0/0.0;其实我们还可以直接使用Double.NaN来得到这个值。在IEEE 754规范里面规定NaN不等于任何值,包括它自己。所以就有了i!=i的代码
作者:
丁一
时间:
2013-3-22 08:42
浮点数值计算时,表示溢出或出错的情况有三个特殊的浮点数值:正无穷大、负无穷大 NaN,
如 一个正整数除以0结果为正无穷大,0/0或者负数的平方根结果为NaN.
不能检测两个两个特定值是否相等,如NaN,因为所有“非数值”的值都认为是不相同的
但是可以用Double.isNaN() 方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2