2015-12-18 6 views
8

BigDecimal वर्ग के प्रलेखन का जिक्र करते हुए में BigDecimal में स्ट्रिंग या पूर्णांक का उपयोग करना है, महत्वपूर्ण अंक (n) और सार्थक अंकों की अधिकतम संख्या (m) कीरूबी

n,m = a.precs
prec रिटर्न संख्या a

मैं BigDecimal से संबंधित निम्नलिखित आउटपुट से परेशान हूं।

require 'bigdecimal'  
BigDecimal.new('1').precs # => [9, 18] 
BigDecimal.new(1).precs # => [9, 27] 

मैं कारण है कि जब एक String पारित हो जाता है, महत्वपूर्ण अंक की अधिकतम संख्या कम है जब एक Fixnum पारित हो जाता है की तुलना में है को समझ नहीं सकता।

इसके परिणामस्वरूप किसी भी परिशुद्धता के मुद्दे होंगे?

+0

निर्माता एक दूसरा तर्क ले करता है यदि आप स्थिरता चाहते हैं: 'BigDecimal.new ('1', 27) .precs' उदाहरण के लिए। और दस्तावेज़ीकरण कहता है कि "महत्वपूर्ण अंकों की संख्या प्रारंभिक मान से निर्धारित होती है" यदि आप इसे स्वयं निर्दिष्ट नहीं करते हैं। –

+0

@muistooshort अपना अधिकार है कि हम इसे निर्दिष्ट कर सकते हैं। लेकिन मेरा सवाल यह था कि 'सटीक' पहली जगह क्यों अलग हैं? – abhinavmsra

+3

यहां अधिक डेटा पॉइंट हैं। निम्नलिखित अवलोकन स्ट्रिंग्स को संदर्भित करते हैं जिनमें वर्ण '1' केवल (उदा।, "111111" ') और संख्याएं हैं जिनके अंक सभी' 1' (उदा।,' 111111') हैं। '10' से कम वर्णों के लिए, '[9, 18]' वापस कर दिया गया है। '10' से कम अंकों के लिए, '[9, 27]' वापस कर दिया गया है। '10' और' 18' अक्षरों * या * अंकों के बीच, '[18,27] 'वापस आ गया है (यानी, एक ही टुपल दोनों तारों और संख्याओं के लिए वापस किया जाता है),' 1 9 'और कुछ और वर्ण या अंकों के बीच , '[27,36]' वापस आ गया है। इसके अलावा: मेरा सुझाव है कि आप अपने कोड में 'आवश्यकता' bigdecimal 'जोड़ें'। –

उत्तर

3

यदि आप सी कोड पढ़ सकते हैं, तो आप https://github.com/ruby/ruby/blob/trunk/ext/bigdecimal/bigdecimal.c#L2509 पर शुरू कर सकते हैं - यह BigDecimal ऑब्जेक्ट के लिए प्रारंभकर्ता है। यदि आप अगली विधि में उस कोड का पालन करते हैं, जो BigDecimal_new है, तो आप देखेंगे कि जब एक पूर्णांक तर्क पारित किया जाता है तो एक स्ट्रिंग तर्क पारित करने के विपरीत आंतरिक आंतरिक दशमलव ऑब्जेक्ट आवंटित करने और बनाने से पहले कुछ और कदम होते हैं।

किसी भी मामले में, आपको परिशुद्धता के नुकसान के बारे में चिंता नहीं करना चाहिए - महत्वपूर्ण अंक विशेषताओं पूर्ण मूल्यों से संकेतों की तरह अधिक हैं। यहां तक ​​कि प्रलेखन यह उल्लेख है: The actual number of significant digits used in computation is usually larger than the specified number.