2012-10-02 21 views
58

संभव डुप्लिकेट:
What does BigInteger having no limit mean?क्या BigInteger के लिए ऊपरी सीमा है?

BigInteger के लिए जावाडोक किसी भी अधिकतम या न्यूनतम परिभाषित नहीं करता है। हालांकि, यह कहना है:

(जोर जोड़ा)

अपरिवर्तनीय मनमाना परिशुद्धता पूर्णांकों

वहाँ इस तरह के एक अधिकतम है, यहां तक ​​कि सिद्धांत रूप में? या BigInteger मूल रूप से अलग है, जैसे वास्तविकता कोई अधिकतम कंप्यूटर पर उपलब्ध स्मृति की मात्रा को छोड़कर है?

+0

_theory_ में कोई सीमा नहीं है। –

+1

उस संभावित डुप्लिकेट में स्वीकृत उत्तर 'BigInteger' की सैद्धांतिक सीमा निर्दिष्ट नहीं करता है; या, यदि यह वास्तव में एक नहीं है, तो यह क्यों समझा नहीं है। इसके बजाए, यह केवल इतना कहता है कि यदि अधिकतम * अधिकतम * है, तो यह आपको वर्तमान स्मृति सीमाओं से कभी प्रभावित नहीं करेगा। – asteri

+0

शायद यह बेस 2 में है, तो अधिकतम (2^32)^इंटीजर.एमएक्स_वीएमएल बेस 2 में है। – Ran

उत्तर

50

संख्या int[] में आयोजित की गई है - एक सरणी का अधिकतम आकार Integer.MAX_VALUE है। तो अधिकतम BigInteger शायद (2^32)^Integer.MAX_VALUE है।

मान्य है, यह कार्यान्वयन का हिस्सा नहीं है, यह कार्यान्वयन का हिस्सा नहीं है।


जावा 8 में, कुछ जानकारी the BigInteger javadoc को जोड़ा गया है, एक न्यूनतम समर्थित सीमा और वर्तमान कार्यान्वयन की वास्तविक सीमा दे रही है:

BigInteger रेंज -2Integer.MAX_VALUE में मूल्यों का समर्थन करना चाहिए (अनन्य) +2Integer.MAX_VALUE (अनन्य) और उस सीमा के बाहर के मानों का समर्थन कर सकता है।

कार्यान्वयन ध्यान दें: BigInteger कंस्ट्रक्टर्स और संचालन ArithmeticException फेंक जब परिणाम +2Integer.MAX_VALUE (अनन्य) को -2Integer.MAX_VALUE (अनन्य) के समर्थित सीमा से बाहर है।

+4

मानों को बिना हस्ताक्षर किए गए 'int' मानों के रूप में उपयोग किया जाता है, अधिकतम' (2^32)^Integer.MAX_VALUE * 10^Integer.MAX_VALUE' जैसा होता है क्योंकि इसे स्केल भी किया जा सकता है। –

+1

@ पीटर Lawrey क्या आप वाकई BigInteger के लिए एक पैमाने है? (BigDecimal के लिए एक है)। – assylias

+1

चूंकि पूर्णांक MAX_VALUE लगभग 2^31 है, अधिकतम मान 32-बिट कंप्यूटर मेमोरी में नहीं रखा जा सकता है :) तो स्मृति सीमा है। –

10

पहले अधिकतम आप पर मारते थे एक स्ट्रिंग जो 2 -1 अंकों का होता है की लंबाई है। यह बिगइंटर के अधिकतम से बहुत छोटा है लेकिन आईएमएचओ इसे मुद्रित नहीं किया जा सकता है, तो इसका अधिकांश मूल्य खो देता है।

+7

पूर्ण निष्पक्षता में, आपको प्रिंट करने के लिए और अधिक तर्क की आवश्यकता होगी यह –

+2

यदि एकाधिक स्ट्रिंग्स का उपयोग करना ठीक है तो आप कई बिगइंटर का भी उपयोग कर सकते हैं।;) –

+3

सच है, लेकिन इससे प्रिंट कोड की तुलना में आपके कोड में अधिक जटिलताएं पैदा होंगी। –

17

बिगइंटर का उपयोग केवल तभी किया जाएगा जब आप जानते हैं कि यह दशमलव नहीं होगा और लंबे डेटा प्रकार की पर्याप्त संभावना नहीं है। बिगइंटर के अधिकतम आकार पर कोई टोपी नहीं है ( कंप्यूटर पर रैम जितना बड़ा हो सकता है)।

here से।

यह का उपयोग कर कार्यान्वित किया जाता है एक int[]:

110  /** 
    111  * The magnitude of this BigInteger, in <i>big-endian</i> order: the 
    112  * zeroth element of this array is the most-significant int of the 
    113  * magnitude. The magnitude must be "minimal" in that the most-significant 
    114  * int ({@code mag[0]}) must be non-zero. This is necessary to 
    115  * ensure that there is exactly one representation for each BigInteger 
    116  * value. Note that this implies that the BigInteger zero has a 
    117  * zero-length mag array. 
    118  */ 
    119  final int[] mag; 

से the source

विकिपीडिया लेख Arbitrary-precision arithmetic से:

कई आधुनिक प्रोग्रामिंग भाषाओं bignums के लिए निर्मित समर्थन है, और दूसरों के मनमाना-परिशुद्धता पूर्णांक के लिए उपलब्ध पुस्तकालय हैं और फ्लोटिंग पॉइंट गणित। प्रोसेसर रजिस्टर के आकार से संबंधित बाइनरी बिट्स की संख्या के रूप में स्टोर मानों की बजाय, ये कार्यान्वयन आम तौर पर अंकों के चर-लंबाई सरणी का उपयोग करते हैं।