所以我最近開始熱愛語言kotlin。今天,在比較雙打的同時,我遇到了不可避免的NaN
。比較Kotlin中的NaN
fun main(args: Array<String>) {
val nan = Double.NaN
println("1: " + (nan == nan))
println("2: " + (nan == (nan as Number)))
println("3: " + ((nan as Number) == nan))
}
NB:(Double
是Number
亞型)
運行上面的代碼得到:
1: false
2: true
3: true
我明白comparing在Java NaN
返回false
,所以我期望false
爲所有表達式。
這種行爲如何解釋? 它背後的基本原理是什麼?
我認爲,如果你提到從[文件]以下行(https://docs.oracle.com/javase/7/docs/api/java/lang/你的答案是更完整DoubleToLongBits「的double.html#doubleToLongBits(double)):**除了所有NaN值被摺疊爲單個」規範「NaN值**。否則,你可能會認爲兩個不同的'NaN'會與該函數的false相比較。 – nfs
@nrohwer,謝謝你的評論,更新了答案。 – hotkey