वह तर्क क्यों
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);