2015-04-07 53 views
3

看起來這是真的在其他語言(see thread on C++),但沒有人知道爲什麼你不能覈對在斯威夫特的Double結構的Double.NaNDouble.quietNaN性負平方根的結果呢?斯威夫特負平方根

下面是一些代碼,我在操場上跑步:

sqrt(-5.0)  // (not a number) 
Double.NaN  // (not a number) 
Double.quietNaN // (not a number) 

Double.NaN == sqrt(-5.0)  // false 
Double.quietNaN == sqrt(-5.0) // false 

看來,斯威夫特遊樂場印刷sqrt(-5.0)Double.NaN,並且Double.quietNaN具有相同的錯誤字符串,但它們有不同的方案表示。我無法弄清楚爲什麼會發生這種情況。有什麼想法嗎?

+1

我搜索了「Swift Nan」,並找到了這個答案:http://stackoverflow.com/a/24351407/2079103 – clearlight

+2

按照慣例,NaN比較false與任何其他值,包括NaN。 – 2015-04-07 00:26:40

+0

不知道NaN比較其他任何東西,很高興知道。我沒有意識到Double符合FloatingPointNumber ...有點奇怪。謝謝! – egracer

回答

1

您可以檢查一個數是否爲NaN通過檢查其等同於自身:

if aNumber != aNumber { 
    println("This is NaN") 
} 

NaN總是不等於本身。

或者你可以使用雙號的isNaN屬性:

let number: Double = 5.0 
let nanNumber: Double = Double.NaN 

number.isNaN // false 
nanNumber.isNaN // true 

浮動數字也有isNaN財產。

+1

你的意思是'aNumber!= aNumber'? – nhgrif