आज, मैं कुछ सी ++ कोड (किसी और द्वारा लिखित) के माध्यम से देख रहा था और इस खंड को पाया:
double someValue = ...
if (someValue < std::numeric_limits<double>::epsilon() &&
someValue > -std::numeric_limits<double>::epsilon()) {
someValue = 0.0;
}
मैं यह पता लगाने की कोशिश कर रहा हूं कि क्या यह भी समझ में आता है।
के लिए प्रलेखन epsilon()
कहता है:
फ़ंक्शन 1 और सबसे छोटे मूल्य के बीच का अंतर 1 से अधिक देता है जो कि प्रतिनिधित्व योग्य है [एक डबल द्वारा]।
क्या यह ० पर भी लागू होता है, यानी epsilon()
० से बड़ा सबसे छोटा मान है? या वहाँ के बीच संख्या है 0
और 0 + epsilon
कहा कि एक द्वारा प्रतिनिधित्व किया जा सकता है double
?
यदि नहीं, तो तुलना के बराबर नहीं है someValue == 0.0
?
numeric_limits<>::epsilon
भ्रामक और अप्रासंगिक है। हम जो चाहते हैं उसे 0 मान लेना है यदि वास्तविक मान 0. से कुछ assume से अधिक नहीं है और समस्या के विनिर्देश के आधार पर चुना जाना चाहिए, मशीन-निर्भर मूल्य पर नहीं। मुझे संदेह है कि वर्तमान एप्सिलॉन बेकार है, क्योंकि कुछ एफपी ऑपरेशन भी इससे बड़ी त्रुटि जमा कर सकते हैं।