इसलिए मैंने हाल ही में भाषा कोटलिन से प्यार करना शुरू कर दिया। आज, युगल की तुलना करते समय, मैं अपरिहार्य NaN
पर आया।कोटलिन में 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))
}
एनबी:
ऊपर कोड पैदावार चल रहा है (Double
Number
की एक उप-प्रकार है):
1: false
2: true
3: true
मैं समझता हूँ कि comparing जावा में NaN
साथ रिटर्न false
, इसलिए मैंकी अपेक्षा करूंगा सभी अभिव्यक्तियों के लिए।
इस व्यवहार को कैसे समझाया जा सकता है? इसके पीछे तर्क क्या है?
मुझे लगता है कि अगर आप से [प्रलेखन] निम्न पंक्ति (https://docs.oracle.com/javase/7/docs/api/java/lang/ उल्लेख अपने जवाब और पूरी होगी Double.html # DoubleToLongBits (डबल)) 'DoubleToLongBits': ** सभी NaN मानों को छोड़कर एक" कैननिकल "NaN मान ** में ध्वस्त हो जाता है। अन्यथा आप सोच सकते हैं कि दो अलग-अलग 'NaN' उस फ़ंक्शन के साथ झूठी तुलना करेंगे। – nfs
@nrohwer, आपकी टिप्पणी के लिए धन्यवाद, उत्तर अपडेट किया गया। – hotkey