Java中的NaN和Infinity
声明并初始化一个变量i,使得以下语句块为无限循环:[java] view plaincopyprint?
while(i != i) {
}
首先我们要知道==是否满足自反性,如果满足,那么该题无解。
事实上==只满足对称性,不满足自反性,一个反例是NaN
NaN是Not a Number的缩写,即不是一个数字。它不等于任何浮点数,包括自己。
我们可以得到这样一个等式:
NaN != NaN
那么如何得到一个NaN呢?
[java] view plaincopyprint?
double i = 0.0/0.0;
float j = 0.0f/0.0f;
System.out.println(i); // NaN
System.out.println(j); // NaN
还可以利用类库提供的API来得到:
[java] view plaincopyprint?
Double.NaN
Float.NaN
在whil循环中,除了可以使用true来达到无限循环目的以外,还可以这样:
[java] view plaincopyprint?
double i = Double.NaN;
while(i != i) {
}
浮点数除了具有NaN之外,还有另外一个特殊值:Infinity:
[java] view plaincopyprint?
double x = 1.0/0;
System.out.println(x); // Infinity
System.out.println(-x); // -Infinity
与NaN不同的是,Infinity满足自反性:
[java] view plaincopyprint?
double i = 1.0/0;
double j = 1.0/0.0;
System.out.println(i == j); // true
java培训、成都php培训找最专业的成都IT培训机构成都达内。!成都java培训官网:http://www.cdtarena.com
----------------解决方案--------------------------------------------------------
NaN Not a Number 不是一个数
Infinite 无限
----------------解决方案--------------------------------------------------------