2012-08-23 15 views
39

मैं इस stackoverflow question relating to Big Integer में देखा है और विशेष रूप से मैं इस लाइन (इटैलिक में शब्द) समझ में नहीं आता:बिगइंटर के पास कोई सीमा नहीं है?

BigInteger कक्षा में, मैं कोई सीमा नहीं है और वहाँ कुछ उपयोगी कार्य हैं, लेकिन यह है BigInteger क्लास के साथ काम करने के लिए अपने सुंदर कोड को बदलने के लिए बहुत निराशाजनक, खासकर जब आदिम ऑपरेटर वहां काम नहीं करते हैं और आपको इस कक्षा से फ़ंक्शंस का उपयोग करना होगा।

मुझे नहीं पता कि मैं क्या खो रहा हूं लेकिन कुछ ऐसा प्रतिनिधित्व करने के लिए जिसमें कोई सीमा नहीं है, आपको अनंत स्मृति की आवश्यकता होगी? यहाँ चाल क्या है?

+0

यह भी देखें: http://stackoverflow.com/a/12693333/829571 – assylias

उत्तर

66

कोई सैद्धांतिक सीमा नहीं है। BigInteger कक्षा उतनी ही मेमोरी आवंटित करती है जितनी इसे डेटा के सभी बिट्स के लिए जरूरी है जिसे इसे पकड़ने के लिए कहा जाता है।

हालांकि, कुछ व्यावहारिक सीमाएं उपलब्ध हैं, जो स्मृति उपलब्ध हैं। और और तकनीकी सीमाएं हैं, हालांकि आप प्रभावित होने की संभावना नहीं हैं: कुछ विधियों का मानना ​​है कि बिट्स int इंडेक्स द्वारा संबोधित करने योग्य हैं, इसलिए Integer.MAX_VALUE बिट्स से ऊपर जाने पर चीजें तोड़ने लगेंगी।

+0

यह स्ट्रिंग या बाइट [] की तरह बहुत अधिक है (हालांकि मुझे लगता है कि वे तकनीकी रूप से पूर्णांक-एड्रेसेबल तत्वों तक सीमित हैं)। – Thilo

+2

@ थिलो: बिगइंटर है: डेटा एक int [] में आयोजित किया जाता है जो संख्याओं के आकार पर सैद्धांतिक सीमा रखता है जो इसका प्रतिनिधित्व कर सकता है। –

+0

मुझे लगता है कि "लंबे" सरणी के लिए काम चल रहा है (और यह सोचने की ज़रूरत है कि उसे किसकी जरूरत है) ;-) – Thilo

13

ग्राहम ने इस प्रश्न का बहुत अच्छा जवाब दिया। मैं केवल यह जोड़ना चाहता हूं कि आपको valueOf विधि से सावधान रहना होगा क्योंकि यह long पैरामीटर का उपयोग करके बनाया गया है, इसलिए अधिकतम मान Long.MAX_VALUE है।

+1

ज्ञान के उस गले के लिए धन्यवाद। + 1। – Geek

+1

जो एक लंबा पैरामीटर लेता है वह स्पष्ट रूप से आगे नहीं जा सकता है, लेकिन ऐसे निर्माता हैं जो स्ट्रिंग्स या बाइट एरे लेते हैं। – Thilo

+0

सुधारित। धन्यवाद :) –

3

हां इसका उपयोग तब किया जाता है जब हमें मनमाना परिशुद्धता के साथ बहुत बड़ी संख्या की आवश्यकता होती है। यह ध्यान रखना महत्वपूर्ण है कि "मनमाने ढंग से" परिशुद्धता या अंकों की संख्या का मतलब "असीमित" नहीं है: इसका मतलब है कि गणना में परिशुद्धता के अंकों या संख्याओं की संख्या में अंकों की संख्या स्मृति और/या परिभाषित सीमाओं को सटीक तक सीमित है हम निर्दिष्ट करते हैं।

2

बिगइंटर वर्ग स्रोत कोड देखें, आप देखेंगे (यह नेटबीन के साथ किया जा सकता है)। एक संख्या को एक int arrays के रूप में दर्शाया जाएगा। उदाहरण, 10113 [1, 0, 1, 1, 3] होगा (यह बिल्कुल ठीक नहीं है कि बिगइंटर वर्ग क्या करता है, केवल एक उदाहरण है कि बड़ी संख्या में मॉड्यूल कैसे काम करता है)। तो, तकनीकी रूप से, इसकी एकमात्र सीमा आपकी याददाश्त होगी।