欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中的NaN和Infinity

程序员文章站 2024-03-25 19:09:10
...

声明并初始化一个变量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