एसटीएल में या बूस्ट में जेनेरिक सरल तुलना कार्यों का एक सेट है?एसटीएल में फ्लोटिंग पॉइंट तुलना, बूस्ट
मुझे जो मिला वह हमेशा टेम्पलेट पैरामीटर, और/या संरचना टेम्पलेट की तत्कालता की आवश्यकता होती है।
मैं की तरह एक वाक्य रचना के साथ कुछ के लिए देख रहा हूँ:
if (is_equal(x,y))
{
...
}
कौन सा रूप में लागू किया जा सकता है:
template <typename T>
bool is_equal(const T& x, const T& y)
{
return (fabs(x - y) < Precision<T>::eps);
}
संपादित करें: मैं बराबर करने के लिए ऑपरेटर बदल दिया है। मार्सेलो Cantos की टिप्पणी से (नीचे टिप्पणी देखें)
आप अधिक या कम की तुलना करने के लिए एक ईपीएसलॉन का उपयोग क्यों करेंगे? – AshleysBrain
एकमात्र ऐसा समय जब फ़्लोटिंग पॉइंट या डबल प्रकार के लिए एक ईपीएसलॉन तुलना की आवश्यकता होती है, समानता '==' तुलना के लिए होती है। अधिक या कम वास्तव में ईपीएसलॉन के साथ कोई अर्थ नहीं है, क्योंकि जब आप बराबर होते हैं तो इसका उत्तर क्या होता है? यदि आपके द्वारा उल्लिखित तरीके से अधिक या कम दोनों परिभाषित किए गए हैं, तो जब वे बराबर होते हैं, तो आपको बी = सत्य और एक == बी = सत्य मिलेगा, जो गलत है। सही व्यवहार यह है कि iff a == b फिर a> b = false, और Akanksh
@ अंकांक, उपरोक्त कार्यान्वयन सही नहीं हो सकता है, लेकिन ईपीएसलॉन-आधारित असमानताएं आपके द्वारा हाइलाइट किए गए परिदृश्य के लिए सार्थक और महत्वपूर्ण हैं। यदि दो संख्याएं ईपीएसलॉन-आधारित '==' परीक्षण के हिसाब से बराबर होती हैं, तो आपको एक '<' परीक्षण की भी आवश्यकता होती है जो झूठी रिटर्न देता है, भले ही पहला नंबर दूसरे की तुलना में थोड़ा छोटा हो। –