您的位置:首页 > 编程语言 > Java开发

Java中的NaN和Infinity

2013-03-04 17:17 337 查看
声明并初始化一个变量i,使得以下语句块为无限循环:

while(i != i) {

}


首先我们要知道==是否满足自反性,如果满足,那么该题无解。

事实上==只满足对称性,不满足自反性,一个反例是NaN

NaN是Not a Number的缩写,即不是一个数字。它不等于任何浮点数,包括自己。

我们可以得到这样一个等式:

NaN != NaN

那么如何得到一个NaN呢?

double i = 0.0/0.0;
float    j  = 0.0f/0.0f;
System.out.println(i); // NaN
System.out.println(j); // NaN


还可以利用类库提供的API来得到:

Double.NaN
Float.NaN


在whil循环中,除了可以使用true来达到无限循环目的以外,还可以这样:

double i = Double.NaN;
while(i != i) {

}


浮点数除了具有NaN之外,还有另外一个特殊值:Infinity:

double x = 1.0/0;
System.out.println(x); // Infinity
System.out.println(-x);  // -Infinity


与NaN不同的是,Infinity满足自反性:

double i = 1.0/0;
double j = 1.0/0.0;
System.out.println(i == j); // true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NaN Infinity