2011-10-24 7 views
16

मैं मनमाना-परिशुद्धता अंकगणित (कभी-कभी बिग्नम, इंटेगर या बिगइन्ट कहा जाता है) को लागू करने के विभिन्न तरीकों के बारे में सोच रहा हूं।क्या मनमानी-परिशुद्धता अंकगणित के लिए सामान्य कार्यान्वयन रणनीतियों हैं जो विशिष्ट भाषा के बावजूद मान्य हैं?

ऐसा लगता है कि सामान्य मुहावरे वास्तविक मूल्य के भंडारण के लिए एक सरणी का उपयोग करना है और यदि आवश्यकताएं बढ़ती हैं या घटती हैं तो इसे आवश्यकतानुसार पुन: आवंटित करें।

अधिक सटीक, ऐसा लगता है कि सरणी तत्वों का थोड़ा सा आकार आमतौर पर समर्थित दूसरा सबसे बड़ा आकार होता है (शायद लागू करने के लिए अतिप्रवाह आसान गणना के साथ गणना करने के लिए?), ई। जी। भाषा/मंच 128 बिट आकार के नंबरों का समर्थन करता है -> ओवरफ्लो को संभालने के लिए 64 बिट संख्या + 128 बिट चर का सरणी।

क्या मनमाने ढंग से सटीक अंकगणितीय को लागू करने के मूलभूत तरीके हैं या ऊपर प्रदर्शन के बिना इसे लागू करने के "प्रयास किए गए और सही" तरीके से ऊपर है?

मेरा प्रश्न अंतर्निहित डेटा संरचना के बारे में है, न कि संचालन के लिए एल्गोरिदम। मुझे करात्सुबा, टूम-कुक एट अलआई पता है।

+1

बड़े पूर्णांक के लिए, एफएफटी और डीएफटी का उपयोग किया जाता है, मुझे लगता है। –

+0

दक्षता के लिए (प्रसार प्रसार) एक बिग्नम को आमतौर पर छोटे-अंत फैशन में बाइनरी सरणी के रूप में संग्रहीत किया जाता है। सरणी तत्वों के आकार को वास्तव में किसी कंप्यूटर को ले जाने के लिए संख्याओं को संसाधित करने की क्षमता के साथ करना होता है (जोड़ों के लिए) या उधार (घटाव के लिए)। प्रोग्रामिंग भाषा विशिष्ट, बिग्नम धारण करने वाला सरणी बाइट सरणी हो सकता है, क्योंकि बाइट आसानी से उपलब्ध सबसे कुशल डेटा प्रकार में डाला जा सकता है। एक int के लिए 4 बाइट, 8 बाइट्स एक लंबे आदि तक –

+0

असल में, अतिरिक्त और घटाव के लिए, आप मूल बिट लंबाई का उपयोग कर सकते हैं। यदि सकारात्मक पूर्णांक के लिए एक वाह है, 'ए + बी <मिनट (ए, बी) 'और' ए-बी> ए' है। लेकिन गुणा में अतिप्रवाह को संभालना काफी मुश्किल है। करने योग्य, लेकिन सीपीयू के लिए सबसे अच्छा छोड़ दिया। :) – vhallac

उत्तर

10

सामान्य बेस -2^एन सिस्टम से मूल रूप से अलग तरीके से Chinese Remainder Theoremrepresent large integers का उपयोग करना संभव है।

मेरा मानना ​​है कि एक सीआरटी-आधारित प्रतिनिधित्व अभी भी उन तत्वों की एक श्रृंखला का उपयोग करेगा जो परंपरागत प्रतिनिधित्व की तरह, सबसे सुविधाजनक मूल अंकगणितीय उपलब्ध हैं। हालांकि, इन तत्वों में संख्या के अवशेष होते हैं जब प्राइम के अनुक्रम से विभाजित होते हैं, आधार -2^एन अंक नहीं।

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

हालांकि, अपने प्रश्न का उत्तर देने के लिए: मेरा मानना ​​है कि यह कहना सही है कि आधार -2^एन प्रणाली वास्तव में "कोशिश की गई और सही" प्रस्तुति है, जिसका उपयोग सबसे लोकप्रिय बिग्नम पुस्तकालयों द्वारा किया जाता है। मुझे लगता है कि मुझे याद है कि मौजूदा सीआरटी आधारित बिग्नम पुस्तकालय हैं, हालांकि मैंने हाल ही में यह देखने के लिए जांच नहीं की है कि वे अभी भी आसपास हैं या नहीं ....

+0

+1, सीआरटी-आधारित प्रतिनिधित्व गुणा के लिए कुछ संख्या-सैद्धांतिक परिवर्तन (एनटीटी) आधारित एल्गोरिदम के लिए आंतरिक प्रतिनिधित्व है। – Mysticial