वह तर्क क्यों
NaN
का मतलब है Not a Number
। एक संख्या क्या नहीं है? कुछ भी। आपके पास एक तरफ कुछ भी हो सकता है और दूसरी तरफ कुछ भी हो सकता है, इसलिए कुछ भी गारंटी नहीं देता है कि दोनों समान हैं। NaN
के साथ गणना की है Double.longBitsToDouble(0x7ff8000000000000L)
और जैसा कि आप देख सकते हैं longBitsToDouble
:
यदि तर्क सीमा में कोई मूल्य है 0x7ff0000000000001L
के माध्यम से
0x7fffffffffffffffL
या श्रेणी में 0xfff0000000000001L
के माध्यम से
0xffffffffffffffffL
, परिणाम एक है NaN
।
साथ ही, NaN
एपीआई के अंदर तार्किक रूप से व्यवहार किया जाता है।
प्रलेखन
/**
* A constant holding a Not-a-Number (NaN) value of type
* {@code double}. It is equivalent to the value returned by
* {@code Double.longBitsToDouble(0x7ff8000000000000L)}.
*/
public static final double NaN = 0.0d / 0.0;
वैसे, NaN
है आपके कोड नमूने के रूप परीक्षण किया गया है:
/**
* Returns {@code true} if the specified number is a
* Not-a-Number (NaN) value, {@code false} otherwise.
*
* @param v the value to be tested.
* @return {@code true} if the value of the argument is NaN;
* {@code false} otherwise.
*/
static public boolean isNaN(double v) {
return (v != v);
}
उपाय
आप जो कर सकते हैं उसका उपयोग करें compare
/ compareTo
:
Double.NaN
इस विधि द्वारा अपने आप को समान माना जाता है और अन्य सभी double
मूल्यों से अधिक (सहित)
Double.POSITIVE_INFINITY
) से बड़ा है।
Double.compare(Double.NaN, Double.NaN);
Double.NaN.compareTo(Double.NaN);
या equals
:
यदि this
और argument
दोनों प्रतिनिधित्व करते हैं Double.NaN
, तो equals
विधि वापस आ जाती है true
, भले ही
Double.NaN==Double.NaN
मूल्य हो false
।
Double.NaN.equals(Double.NaN);