समानता के लिए युगल की तुलना करते समय, हमें सहनशीलता स्तर देना होगा, क्योंकि फ़्लोटिंग-पॉइंट गणना त्रुटियों को पेश कर सकती है। उदाहरण के लिए:निरंतर असाइनमेंट की फ़्लोटिंग-पॉइंट तुलना
double x;
double y;
x = f();
y = g();
if (fabs(x-y)<epsilon) {
// they are equal!
} else {
// they are not!
}
हालांकि, अगर मैं बस एक निरंतर मूल्य, आवंटित किसी भी गणना के बिना, मैं अभी भी एप्सिलॉन की जाँच करने की आवश्यकता है?
double x = 1;
double y = 1;
if (x==y) {
// they are equal!
} else {
// no they are not!
}
==
तुलना पर्याप्त है? या मुझे fabs(x-y)<epsilon
फिर से करने की ज़रूरत है? क्या असाइन करने में त्रुटि लागू करना संभव है? क्या मैं भी पागल हूँ?
कास्टिंग के बारे में कैसे (double x = static_cast<double>(100)
)? क्या वह फ्लोटिंग-पॉइंट त्रुटि भी पेश करेगा?
मैं लिनक्स पर सी ++ का उपयोग कर रहा हूं, लेकिन यदि यह भाषा से अलग है, तो मैं भी इसे समझना चाहता हूं।
चाहे आपको एक ईपीएसलॉन की आवश्यकता हो, स्थिति पर निर्भर करता है। जैसे जब आपको एक संक्रमणीय समानता की आवश्यकता होती है ('a == b && b == c' का अर्थ है 'a == c'), तो आप एक ईपीएसलॉन का उपयोग नहीं कर सकते हैं। बीटीडब्लू, 'डबल एक्स = 1' का अर्थ पहले से ही है' डबल एक्स = स्टेटिक_कास्ट (1) ' –
MSalters