2010-11-02 4 views
5

संभव डुप्लिकेट:
Numeric comparison difficulty in Rआर नरक का पहला सर्कल। 0,1 = 0,3/3

हैलो सभी,

"R Inferno" कागज के अनुसार। मैं अभी आर नरक के पहले सर्कल में हूँ। यह वह जगह है जहां pagans 0.1 == 0.3/3 की उम्मीद है। पेपर ऐसे मामलों के लिए all.equal फ़ंक्शन का उपयोग करने की अनुशंसा करता है, हालांकि मुझे "> =" या "< =" शर्तों की जांच करने की आवश्यकता है। उनके वर्तमान उदाहरण के साथ विफल:

> .1 >= .3/3 
[1] TRUE 
> .1 <= .3/3 
[1] FALSE 

क्या सभी के लिए समान कार्य है। असमानता की जांच करता है?

धन्यवाद,

इल्या

+3

यह एक विशिष्ट त्रुटि नहीं है, लेकिन फ्लोटिंग पॉइंट नंबरों के द्विआधारी प्रतिनिधित्व के कारण होने वाली एक सामान्य त्रुटि है। उदाहरण के लिए http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems देखें। – schnaader

+0

मुझे पता है कि त्रुटि क्यों होती है। मैं जानना चाहता हूं कि कोई आर फ़ंक्शन है जो असमानताओं की जांच कर सकता है या मुझे फ़्लोटिंग पॉइंट्स के साथ दिमाग में लिखना होगा। – ilya

+0

हाँ, मुझे बेहतर खोज करने की आवश्यकता है – ilya

उत्तर

7

इन सवालों देखें:

सामान्य शब्दों में, यदि आप ऊपर दूसरी कड़ी के अनुसार एक सहिष्णुता स्तर को शामिल करके इस समस्या से निपटने कर सकते हैं।

+0

दूसरा लिंक देखें जो सीधे प्रश्न का उत्तर देता है। – Shane

+0

धन्यवाद शेन, दूसरे लिंक में मैंने आपका पोस्ट नया ऑपरेटर बनाने के साथ पाया - ठीक वही जो मैं चाहता था। धन्यवाद!! – ilya

+0

@ilya Glad हम मदद कर सकते हैं! – Shane

4

कृपया R FAQ entry Why doesn't R think these numbers are equal और संदर्भ उसमें देखते हैं।

+1

यह आकर्षक है, लेकिन ओपी का जवाब नहीं है। – mob

+3

निश्चित है, या आप एक और प्रविष्टि 7.31 पढ़ते हैं। उदाहरण है 'sqrt (2) * sqrt (2) == 2' FALSE के रूप में बाहर आता है और यहां एक ही समस्या है: फ़्लोटिंग पॉइंट संख्याओं का प्रतिनिधित्व। –

2

आप zapsmall() के न्यायसंगत उपयोग का प्रयास कर सकते हैं जो आपको लगता है कि व्यवहार करने के लिए लगता है। मुझे नहीं पता कि यह सभी स्थितियों में काम करता है या नहीं। उदाहरण के लिए,

.1 >= zapsmall(.3/3) 
[1] TRUE 
> .1 <= zapsmall(.3/3) 
[1] TRUE 
8

all.equal की मुख्य परीक्षा है कि क्या कुछ मान x और y और कुछ छोटे tolerance के लिए abs(x-y) < tolerance है। समतुल्य असमानता परीक्षण जांचेंगे:

x <= y:   x-y < tolerance 
x < y:   x-y < -tolerance 
x >= y:   x-y > -tolerance 
x > y:   x-y > tolerance 
संबंधित मुद्दे