我们如何在我们的代码中使用它们,以及什么会导致NaN(不是数字)?
答案 0 :(得分:15)
0/0
的结果。 Float
类规范中的常量:
更多信息可在IEEE-754 page in Wikipedia。
中找到这是一个用来说明三个常数的小程序:
System.out.println(0f / 0f);
System.out.println(1f / 0f);
System.out.println(-1f / 0f);
输出:
NaN
Infinity
-Infinity
答案 1 :(得分:11)
This可能是一个很好的参考。
正无穷大是一个非常大的正数,无法正常表示。负无穷大是一个负数,它无法正常表示。 NaN表示“非数字”,并且是由数学运算产生的,该数学运算不产生数字,如0除以0。
在Java中,Double和Float类都有常量来表示所有三种情况。它们是POSITIVE_INFINITY,NEGATIVE_INFINITY和NaN。
另外考虑一下:
double a = Math.pow(10, 600) - Math.pow(10, 600); //==NaN
数学上,每个人都可以看到它是0.但是对于机器来说,它是一个“无限” - “无限”(相同等级),它确实是NaN。
答案 2 :(得分:3)
Infinity(在java中)意味着操作的结果将是一个非常大的正数或负数,它无法正常表示。
答案 3 :(得分:2)
这个想法是代表特殊数字,这些特殊数字可以通过对“正常”数字的操作自然产生。你可以看到无限(正面和负面)作为浮点表示的“溢出”,这个想法是,至少在某些条件下,具有函数返回的这样的值仍然会给出有意义的结果。例如,它们仍然具有一些排序属性(因此它们不会拧紧排序操作)。
Nan非常特别:如果x是Nan,则x == x是假的(这实际上是测试nan的一种方法,至少在C中,再次)。如果您不习惯浮点特性,这可能会非常混乱。除非你进行科学计算,否则我会说通过操作返回Nan是一个错误,至少在大多数情况下会浮现在脑海中。 Nan可以进行各种操作:0/0,inf - inf,inf / inf,0 * inf。 Nan也没有任何订购财产。
答案 4 :(得分:0)
您可以将它们用作任何其他数字:
e.g:
float min = Float.NEGATIVE_INFINITY;
float max = Float.POSITIVE_INFINITY;
float nan = Float.NaN;
答案 5 :(得分:0)
正无穷大是一个非常大的正数,它不可能 通常代表。负无穷大是一个如此大的负数 它无法正常表示。 NaN表示"不是数字"和 来自数学运算的结果,该运算不会产生数字 - 比如将0除以0。
这不是一个完整的答案(或者说不够清楚) - 考虑一下:
double a = Math.pow(10,600) - Math.pow(10,600); //==NaN
数学上每个人都可以看到它是0.但对于机器来说它是一个" Infinity" - " Infinity"(同样的顺序)女巫确实是NaN ......