सटीक समानता के लिए दो फ़्लोटिंग पॉइंट मान की तुलना करने का एक सुरुचिपूर्ण, पठनीय और गैर-वर्बोज़ तरीका क्या है?सटीक समानता के लिए दो फ्लोट/डबल मानों की जांच करें
जितना आसान हो सकता है उतना आसान, यह एक दुष्ट समस्या है। ==
ऑपरेटर काम NaN के लिए करवाने नहीं है और भी शून्य के लिए विशेष उपचार है:
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
लेकिन मैं निर्धारित करने के लिए दो मान बिल्कुल एक जैसे हैं चाहते हैं (लेकिन मैं अलग NaN के लिए नहीं देखभाल करना पैटर्न, तो कोई भी NaN == कोई अन्य NaN -> सत्य)।
मैं कोड के इस बदसूरत राक्षस टुकड़े के साथ ऐसा कर सकते हैं:
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
वहाँ एक बेहतर तरीका यह लिखने के लिए (और इरादे स्पष्ट कर) है?
आप ऐसा नहीं करते कि आप ऐसा क्यों करना चाहते हैं। यदि वे वास्तव में फ़्लोटिंग पॉइंट नंबर हैं तो आपका उत्तर सार्थक नहीं होगा। – Julian
@ जुलिएन पीटर उदाहरण के लिए पीटरलावरी का जवाब देखें जहां यह बहुत सार्थक है। मेरा आवेदन हालांकि किसी ऑब्जेक्ट की बराबर() विधि है जहां एक फ्लोट प्राथमिक कुंजी का हिस्सा है (मेरी पसंद से नहीं)। फ़्लोटिंग पॉइंट आमतौर पर अंतर्ज्ञानी धारणाओं को खारिज कर देता है, इसलिए मैं किनारे के मामलों को कवर करने के लिए सावधान हूं। – Durandal
क्षमा करें, आप इसे बेहतर नहीं कर सके, आपका "बदसूरत राक्षस टुकड़ा" पहले से ही सही है ... –