我期待Double.NaN - Double.NaN
等於0,但它不是。關於Java中的NaN的數學規則
有人可以解釋發生了什麼事嗎? 關於在NaN上進行數學的經驗是什麼? 是否像「如果任何子表達式是NaN,那麼整個表達式都是NaN」?
感謝,
我期待Double.NaN - Double.NaN
等於0,但它不是。關於Java中的NaN的數學規則
有人可以解釋發生了什麼事嗎? 關於在NaN上進行數學的經驗是什麼? 是否像「如果任何子表達式是NaN,那麼整個表達式都是NaN」?
感謝,
NaN
代表非數字,這就是爲什麼NaN - NaN = NaN
。試想一下,這樣的事情:
"foo" - "bar" = ??? <-- What should be the output?
或者
"foo" - (new Object()) = ??? <-- none of them are numbers
更數學例子在此:
0/0 = NaN <-- Mathematically we don't know the exact result
所以,有這樣的事情:
0/0 - 0/0 = NaN
更多信息:
不是一個很好的例子;人們可以想出一個字符串「減法」的定義... – 2014-09-22 22:15:01
「0/0 ...我們不知道確切的結果。」其實我們知道它。 (提示:這是一個數字'x',使得'x * 0 == 0')。 – 2014-09-22 22:28:04
@jameslarge酷,編輯我的文章,併發布確切的價值:) – 2014-09-22 22:30:29
楠,毫不誇張地說,*不是數字*。你不能對它進行算術運算。 – 2014-09-22 22:13:29
即使NaN == NaN也會返回false(所以有特殊的方法來測試NaN,基本上NaN是「我不知道」,什麼是「我不知道」減去「我不知道」,它可能是6,5,infinity。仍然「我不知道」 – 2014-09-22 22:14:13
不是說即使是像無限的無限的東西仍然是未定義的...更不用說'我不知道'前面解釋;) – dominik4142 2014-09-22 22:15:15