2014-09-22 14 views
0

我期待Double.NaN - Double.NaN等於0,但它不是。關於Java中的NaN的數學規則

有人可以解釋發生了什麼事嗎? 關於在NaN上進行數學的經驗是什麼? 是否像「如果任何子表達式是NaN,那麼整個表達式都是NaN」?

感謝,

+9

楠,毫不誇張地說,*不是數字*。你不能對它進行算術運算。 – 2014-09-22 22:13:29

+2

即使NaN == NaN也會返回false(所以有特殊的方法來測試NaN,基本上NaN是「我不知道」,什麼是「我不知道」減去「我不知道」,它可能是6,5,infinity。仍然「我不知道」 – 2014-09-22 22:14:13

+1

不是說即使是像無限的無限的東西仍然是未定義的...更不用說'我不知道'前面解釋;) – dominik4142 2014-09-22 22:15:15

回答

6

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 

更多信息:

+0

不是一個很好的例子;人們可以想出一個字符串「減法」的定義... – 2014-09-22 22:15:01

+0

「0/0 ...我們不知道確切的結果。」其實我們知道它。 (提示:這是一個數字'x',使得'x * 0 == 0')。 – 2014-09-22 22:28:04

+1

@jameslarge酷,編輯我的文章,併發布確切的價值:) – 2014-09-22 22:30:29