सं
यह पर्याप्त या तो a
या b
के लिए गलत a < b
, a == b
और a > b
से प्रत्येक के लिए NaN
होने के लिए है।
दोनों a
और b
तो गैर NaN हैं वास्तव में a < b
, a == b
या a > b
में से एक सत्य हो गया है।
पूरक में, इस answer आपको बताता है कि आप C++ में एक NaN मूल्य प्राप्त कर सकते हैं (वहाँ कई NaN मान होते हैं, कि उनके अभ्यावेदन निरीक्षण से प्रतिष्ठित किया जा सकता है, और वे सभी एक दूसरे से अलग हैं, क्योंकि NaN बराबर नहीं है कुछ भी करने के लिए, और कैसे आप यह जांच सकते हैं कि कोई मान NaN है (यह देखने के लिए एक idiomatic परीक्षण है कि एक चर x
एक NaN x != x
है, और वास्तव में std::isnan()
अक्सर इस तरह कार्यान्वित किया जाता है, लेकिन कुछ प्रोग्रामर जिन्हें आपका कोड पढ़ना होगा इससे भ्रमित हो सकता है)।
और फिर, a
और b
पिछले गणनाओं के परिणाम हैं, तो अतिरिक्त परिशुद्धता की समस्या है। सी 0 सीसी में चर्चा के लिए देखें। सी 99 मानक ने नियमों को स्पष्ट कर दिया है कि अतिरिक्त परिशुद्धता क्या हो सकती है और क्या नहीं हो सकती है, लेकिन सी ++ के बावजूद FLT_EVAL_METHOD
की परिभाषा के लिए सी मानक को संदर्भित करके इन नियमों को विरासत में कम या कम करने के बावजूद cfloat
, अभ्यास में सी संकलक नियमों को सी ++ कंपाइलर्स से अधिक गंभीरता से लेते हैं। उदाहरण के लिए जीसीसी -std=c99
के साथ संकलित करते समय सी के नियमों को लागू करता है, और इस संदर्भ में आप संपत्ति पर भरोसा कर सकते हैं, लेकिन इस लेखन के अनुसार जीसीसी इन नियमों को लागू नहीं करता है जब सी ++ कंपाइलर के रूप में उपयोग किया जाता है।
स्रोत
2017-02-01 20:56:10
यदि आपका फ्लोट एक नाएन नहीं है। –
आप कोने-केस को बाहर करने के लिए शायद इसे 'गैर-नॉन फ्लोट मान' में संशोधित करना चाहते हैं? – smci
नहीं, ** उनमें से अधिकतर ** ** सत्य होने की गारंटी है। –