यहाँ है के लिए प्रलेखन assert_in_delta
:
assert_in_delta(exp, act, delta = 0.001, msg = nil) public
फ्लोट्स की तुलना करने के लिए। विफल रहता है जब तक कि एक्सप और एक्ट एक-दूसरे के डेल्टा के भीतर न हों।
assert_in_delta Math::PI, (22.0 / 7.0), 0.01
और यहाँ है के लिए प्रलेखन assert_in_epsilon
assert_in_epsilon(a, b, epsilon = 0.001, msg = nil) public
फ्लोट्स की तुलना करने के लिए। विफल रहता है जब तक कि एक्सप और एक्ट में ईपीएसलॉन से कम रिश्तेदार त्रुटि न हो।
ये बहुत समान दिखते हैं; वास्तव में क्या अंतर है? आप दूसरे पर एक विधि का उपयोग कब करेंगे?
उत्तर:
जवाब के लिए 5 № 1मुख्य अंतर यह है:
assert_in_delta
के लिए है पूर्ण त्रुटियों।assert_in_epsilon
के लिए है सापेक्ष त्रुटियों।
ये दो अलग-अलग प्रकार हैं अनुमान त्रुटि:
पूर्ण त्रुटि सटीक मूल्य और अनुमान के बीच अंतर की परिमाण है।
सापेक्ष त्रुटि सटीक मान की परिमाण से विभाजित पूर्ण त्रुटि है।
assert_in_delta
समझने के लिए सबसे आसान है, और आमतौर पर परीक्षणों में इस्तेमाल किया जाएगा।
प्रलेखन के उदाहरण में: assert_in_delta Math::PI, (22.0 / 7.0), 0.01
, यह दावा होगा उत्तीर्ण करना इसलिये 22.0/7 - Math::PI == 0.001264...
, जो अनुमति से कम है delta
का 0.01
.
(से विकिपीडिया)
assert_in_epsilon
अक्सर जंगली रूप से भिन्न आकार की संख्या के अनुमानों की तुलना करने के लिए प्रयोग किया जाता है।
उदाहरण के लिए, संख्या का अनुमान लगाया जा रहा है 1,000
की एक पूर्ण त्रुटि के साथ 3
ज्यादातर अनुप्रयोगों में, संख्या को अनुमानित करने से भी बदतर है 1,000,000
की एक पूर्ण त्रुटि के साथ 3
; पहले मामले में सापेक्ष त्रुटि है 0.003
और दूसरे में यह केवल है 0.000003
.
इस उदाहरण को लिखने के लिए MiniTest
, मान लीजिए कि हमारे पास दो मानों की एक सरणी है जिसे हम देखना चाहते हैं "लगभग बराबर" हैं 1,000
तथा 1,000,000
क्रमशः। हम निम्नलिखित लिख सकते हैं:
# Using the default `epsilon` of 0.001
assert_in_epsilon(1_000, actual[0])
assert_in_epsilon(1_000_000, actual[1])
यह कामकाजी रूप से लिखने के बराबर होगा:
assert_in_delta(1_000, actual[0], 1)
assert_in_delta(1_000_000, actual[1], 1000)