我写了一个程序,我认为应该打印出来,而不是把它给出错误。
public class Test {
public static void main(String[] args) {
double i = 0.0 / 0.0;
System.out.println(i - i == 0);
}
}
有人可以解释一下为什么会出现这种情况。
答案 0 :(得分:2)
这是因为i = 0.0 / 0.0
等于NaN
,因此NaN
既不等于0
也不等于(Nan)
答案 1 :(得分:1)
这是因为:
public class TestClass {
public static void main(String[] args) {
double i = 0.0 / 0.0;
System.out.println(i-i); //NaN
System.out.println(i - i == 0);//false
}
}
NaN
,代表不是数字,是表示未定义或不可表示值的数值数据类型值,尤其是在浮点计算中。
答案 2 :(得分:0)
double i = 0.0 / 0.0; // this assigned i=NaN
“NaN”代表“不是数字”。如果浮点运算有一些输入参数导致操作产生一些未定义的结果,则会产生“Nan”。例如,0.0除以0.0是算术上未定义的。取负数的平方根也是未定义的。
比较时
System.out.println(i - i == 0); // it do Nan-Nan which is NaN
尝试比较
NaN to 0 which is false
答案 3 :(得分:0)
double i = 0.0 / 0.0;
它将评估为NaN
而i - i
将是NaN - NaN
又是NaN
,即!= 0
答案 4 :(得分:0)
你在期待什么? 0.0 / 0.0
是indeterminate form,根据浮动格式NaN
使用特殊值进行映射。
这是一个特殊的值,因为它具有破坏性,它通过每个连续的算术运算传播,这很好,因为它有助于诊断操作问题。
确实是0.0 / 0.0 = NaN
和NaN - whatever = NaN
的情况(所以(0.0/0.0)-5.0
也会产生NaN
。