आर्बिट्ररी-स्पष्ट अंकगणित: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Calculations where numbers' precision is only limited by computer memory}} {{More citations needed|date=July 2007}} {{Floating-point}} कंप्यू...")
 
No edit summary
Line 1: Line 1:
{{Short description|Calculations where numbers' precision is only limited by computer memory}}
{{Short description|Calculations where numbers' precision is only limited by computer memory}}
{{More citations needed|date=July 2007}}
{{Floating-point}}
{{Floating-point}}
[[कंप्यूटर विज्ञान]] में, मनमाना-सटीक अंकगणित, जिसे बिग्नम अंकगणित, बहु-सटीक अंकगणित, या कभी-कभी अनंत-परिशुद्धता अंकगणित भी कहा जाता है, यह इंगित करता है कि गणना उन संख्याओं पर की जाती है जिनके [[संख्यात्मक अंक]]ों की सटीकता (अंकगणित) केवल उपलब्ध [[मेमोरी (कंप्यूटर)]] द्वारा सीमित होती है। ) मेजबान प्रणाली का। यह अधिकांश [[अंकगणितीय तर्क इकाई]] (एएलयू) हार्डवेयर में पाए जाने वाले तेज़ [[निश्चित-परिशुद्धता अंकगणित]] के विपरीत है, जो आमतौर पर 8 और 64 [[अंश]]्स के बीच सटीकता प्रदान करता है।
[[कंप्यूटर विज्ञान]] में, मनमाना-सटीक अंकगणित, जिसे बिग्नम अंकगणित, बहु-सटीक अंकगणित, या कभी-कभी अनंत-परिशुद्धता अंकगणित भी कहा जाता है, यह इंगित करता है कि गणना उन संख्याओं पर की जाती है जिनके [[संख्यात्मक अंक]]ों की सटीकता (अंकगणित) केवल उपलब्ध [[मेमोरी (कंप्यूटर)]] द्वारा सीमित होती है। ) मेजबान प्रणाली का। यह अधिकांश [[अंकगणितीय तर्क इकाई]] (एएलयू) हार्डवेयर में पाए जाने वाले तेज़ [[निश्चित-परिशुद्धता अंकगणित]] के विपरीत है, जो आमतौर पर 8 और 64 [[अंश]]्स के बीच सटीकता प्रदान करता है।


कई आधुनिक [[प्रोग्रामिंग भाषा]]ओं में बिग्नम के लिए अंतर्निहित समर्थन है,<ref>{{Cite web|last=dotnet-bot|title=BigInteger Struct (System.Numerics)|url=https://docs.microsoft.com/en-us/dotnet/api/system.numerics.biginteger|access-date=2022-02-22|website=docs.microsoft.com|language=en-us}}</ref><ref>{{Cite web|title=PEP 237 -- Unifying Long Integers and Integers|url=https://peps.python.org/pep-0237/|access-date=2022-05-23|website=Python.org|language=en}}</ref><ref>{{Cite web|title=BigInteger (Java Platform SE 7 )|url=https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html|access-date=2022-02-22|website=docs.oracle.com}}</ref><ref>{{Cite web|title=BigInt - JavaScript {{!}} MDN|url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt|access-date=2022-02-22|website=developer.mozilla.org|language=en-US}}</ref> और अन्य के पास मनमाना-परिशुद्धता पूर्णांक_ (कंप्यूटर_साइंस) और [[तैरनेवाला स्थल]] गणित के लिए पुस्तकालय उपलब्ध हैं। [[प्रोसेसर रजिस्टर]] के आकार से संबंधित बिट्स की एक निश्चित संख्या के रूप में मानों को संग्रहीत करने के बजाय, ये कार्यान्वयन आमतौर पर अंकों की चर-लंबाई [[सरणी डेटा संरचना]] का उपयोग करते हैं।
कई आधुनिक [[प्रोग्रामिंग भाषा]]ओं में बिग्नम के लिए अंतर्निहित समर्थन है,<ref>{{Cite web|last=dotnet-bot|title=BigInteger Struct (System.Numerics)|url=https://docs.microsoft.com/en-us/dotnet/api/system.numerics.biginteger|access-date=2022-02-22|website=docs.microsoft.com|language=en-us}}</ref><ref>{{Cite web|title=PEP 237 -- Unifying Long Integers and Integers|url=https://peps.python.org/pep-0237/|access-date=2022-05-23|website=Python.org|language=en}}</ref><ref>{{Cite web|title=BigInteger (Java Platform SE 7 )|url=https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html|access-date=2022-02-22|website=docs.oracle.com}}</ref><ref>{{Cite web|title=BigInt - JavaScript {{!}} MDN|url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt|access-date=2022-02-22|website=developer.mozilla.org|language=en-US}}</ref> और अन्य के पास मनमाना-परिशुद्धता पूर्णांक_ (कंप्यूटर_साइंस) और [[तैरनेवाला स्थल]] गणित के लिए पुस्तकालय उपलब्ध हैं। [[प्रोसेसर रजिस्टर]] के आकार से संबंधित बिट्स की निश्चित संख्या के रूप में मानों को संग्रहीत करने के बजाय, ये कार्यान्वयन आमतौर पर अंकों की चर-लंबाई [[सरणी डेटा संरचना]] का उपयोग करते हैं।


मनमाना परिशुद्धता का उपयोग उन अनुप्रयोगों में किया जाता है जहां [[अंकगणित]] की गति सीमित कारक नहीं है, या जहां बहुत बड़ी संख्या के साथ [[फ़्लोटिंग पॉइंट त्रुटि शमन]] की आवश्यकता होती है। इसे कई कंप्यूटर बीजगणित प्रणालियों द्वारा प्रदान की जाने वाली प्रतीकात्मक संगणना के साथ भ्रमित नहीं होना चाहिए, जो भावों द्वारा संख्याओं का प्रतिनिधित्व करते हैं जैसे कि {{math|''π''·sin(2)}}, और इस प्रकार अनंत सटीकता के साथ किसी भी [[गणना योग्य संख्या]] का प्रतिनिधित्व कर सकता है।
मनमाना परिशुद्धता का उपयोग उन अनुप्रयोगों में किया जाता है जहां [[अंकगणित]] की गति सीमित कारक नहीं है, या जहां बहुत बड़ी संख्या के साथ [[फ़्लोटिंग पॉइंट त्रुटि शमन]] की आवश्यकता होती है। इसे कई कंप्यूटर बीजगणित प्रणालियों द्वारा प्रदान की जाने वाली प्रतीकात्मक संगणना के साथ भ्रमित नहीं होना चाहिए, जो भावों द्वारा संख्याओं का प्रतिनिधित्व करते हैं जैसे कि {{math|''π''·sin(2)}}, और इस प्रकार अनंत सटीकता के साथ किसी भी [[गणना योग्य संख्या]] का प्रतिनिधित्व कर सकता है।
Line 10: Line 9:
== अनुप्रयोग ==
== अनुप्रयोग ==


एक सामान्य अनुप्रयोग [[सार्वजनिक कुंजी क्रिप्टोग्राफी]] है, जिसके एल्गोरिदम आमतौर पर सैकड़ों अंकों वाले पूर्णांक वाले अंकगणित का उपयोग करते हैं।<ref>{{cite web |url=https://arstechnica.com/news.ars/post/20070523-researchers-307-digit-key-crack-endangers-1024-bit-rsa.html |title=Researchers: 307-digit key crack endangers 1024-bit RSA |author=Jacqui Cheng |date=May 23, 2007}}</ref><ref>{{cite web|url=http://www.rsa.com/rsalabs/node.asp?id%3D2218 |title=RSA Laboratories - 3.1.5 How large a key should be used in the RSA cryptosystem? |access-date=2012-03-31 |url-status=dead |archive-url=https://web.archive.org/web/20120401144624/http://www.rsa.com/rsalabs/node.asp?id=2218 |archive-date=2012-04-01 }} recommends important RSA keys be 2048 bits (roughly 600 digits).</ref> एक और स्थिति में है जहां कृत्रिम सीमाएं और [[अंकगणितीय अतिप्रवाह]] अनुचित होगा। यह निश्चित-सटीक गणनाओं के परिणामों की जाँच के लिए भी उपयोगी है, और सूत्रों में आवश्यक गुणांकों के लिए इष्टतम या निकट-इष्टतम मान निर्धारित करने के लिए, उदाहरण के लिए <math display=inline>\sqrt{\frac{1}{3}}</math> जो गॉसियन एकीकरण में प्रकट होता है।<ref>{{cite report|url=https://tel.archives-ouvertes.fr/tel-00477243/en |title=Intégration numérique avec erreur bornée en précision arbitraire. Modélisation et simulation | author=Laurent Fousse | publisher=Université Henri Poincaré - Nancy I | language=fr | date=2006 }} </ref>
एक सामान्य अनुप्रयोग [[सार्वजनिक कुंजी क्रिप्टोग्राफी]] है, जिसके एल्गोरिदम आमतौर पर सैकड़ों अंकों वाले पूर्णांक वाले अंकगणित का उपयोग करते हैं।<ref>{{cite web |url=https://arstechnica.com/news.ars/post/20070523-researchers-307-digit-key-crack-endangers-1024-bit-rsa.html |title=Researchers: 307-digit key crack endangers 1024-bit RSA |author=Jacqui Cheng |date=May 23, 2007}}</ref><ref>{{cite web|url=http://www.rsa.com/rsalabs/node.asp?id%3D2218 |title=RSA Laboratories - 3.1.5 How large a key should be used in the RSA cryptosystem? |access-date=2012-03-31 |url-status=dead |archive-url=https://web.archive.org/web/20120401144624/http://www.rsa.com/rsalabs/node.asp?id=2218 |archive-date=2012-04-01 }} recommends important RSA keys be 2048 bits (roughly 600 digits).</ref> और स्थिति में है जहां कृत्रिम सीमाएं और [[अंकगणितीय अतिप्रवाह]] अनुचित होगा। यह निश्चित-सटीक गणनाओं के परिणामों की जाँच के लिए भी उपयोगी है, और सूत्रों में आवश्यक गुणांकों के लिए इष्टतम या निकट-इष्टतम मान निर्धारित करने के लिए, उदाहरण के लिए <math display=inline>\sqrt{\frac{1}{3}}</math> जो गॉसियन एकीकरण में प्रकट होता है।<ref>{{cite report|url=https://tel.archives-ouvertes.fr/tel-00477243/en |title=Intégration numérique avec erreur bornée en précision arbitraire. Modélisation et simulation | author=Laurent Fousse | publisher=Université Henri Poincaré - Nancy I | language=fr | date=2006 }} </ref>
मनमाने ढंग से सटीक अंकगणित का उपयोग मौलिक [[गणितीय स्थिरांक]] जैसे pi|π को लाखों या अधिक अंकों तक करने और अंकों के तार के गुणों का विश्लेषण करने के लिए भी किया जाता है।<ref>{{cite journal |author=R. K. Pathria |author-link=Raj Pathria |title=A Statistical Study of the Randomness Among the First 10,000 Digits of Pi |year=1962 |journal=Mathematics of Computation |volume=16 |issue=78 |pages=188–197 |url=https://www.ams.org/journals/mcom/1962-16-078/S0025-5718-1962-0144443-7/ |access-date=2014-01-10 |doi=10.1090/s0025-5718-1962-0144443-7|doi-access=free }} A quote example from this article: "Such an extreme pattern is dangerous even if diluted by one of its neighbouring blocks"; this was the occurrence of the sequence 77 twenty-eight times in one block of a thousand digits.</ref> या अधिक आम तौर पर [[रीमैन जीटा फ़ंक्शन]] जैसे कार्यों के सटीक व्यवहार की जांच करने के लिए जहां विश्लेषणात्मक तरीकों के माध्यम से कुछ प्रश्नों का पता लगाना मुश्किल होता है। एक अन्य उदाहरण [[भग्न]] छवियों को अत्यधिक उच्च आवर्धन के साथ प्रस्तुत करना है, जैसे कि [[मैंडेलब्रॉट सेट]] में पाए जाते हैं।
मनमाने ढंग से सटीक अंकगणित का उपयोग मौलिक [[गणितीय स्थिरांक]] जैसे pi|π को लाखों या अधिक अंकों तक करने और अंकों के तार के गुणों का विश्लेषण करने के लिए भी किया जाता है।<ref>{{cite journal |author=R. K. Pathria |author-link=Raj Pathria |title=A Statistical Study of the Randomness Among the First 10,000 Digits of Pi |year=1962 |journal=Mathematics of Computation |volume=16 |issue=78 |pages=188–197 |url=https://www.ams.org/journals/mcom/1962-16-078/S0025-5718-1962-0144443-7/ |access-date=2014-01-10 |doi=10.1090/s0025-5718-1962-0144443-7|doi-access=free }} A quote example from this article: "Such an extreme pattern is dangerous even if diluted by one of its neighbouring blocks"; this was the occurrence of the sequence 77 twenty-eight times in one block of a thousand digits.</ref> या अधिक आम तौर पर [[रीमैन जीटा फ़ंक्शन]] जैसे कार्यों के सटीक व्यवहार की जांच करने के लिए जहां विश्लेषणात्मक तरीकों के माध्यम से कुछ प्रश्नों का पता लगाना मुश्किल होता है। अन्य उदाहरण [[भग्न]] छवियों को अत्यधिक उच्च आवर्धन के साथ प्रस्तुत करना है, जैसे कि [[मैंडेलब्रॉट सेट]] में पाए जाते हैं।


अंकगणितीय अतिप्रवाह से बचने के लिए मनमाना-परिशुद्धता अंकगणित का भी उपयोग किया जा सकता है, जो निश्चित-परिशुद्धता अंकगणित की एक अंतर्निहित सीमा है। 5-अंकीय [[ओडोमीटर]] के प्रदर्शन के समान, जो 99999 से 00000 में बदलता है, एक निश्चित-परिशुद्धता पूर्णांक [[पूर्णांक अतिप्रवाह]] प्रदर्शित कर सकता है यदि संख्या सटीकता के निश्चित स्तर पर प्रतिनिधित्व करने के लिए बहुत बड़ी हो जाती है। इसके बजाय कुछ प्रोसेसर [[संतृप्ति अंकगणित]] द्वारा अतिप्रवाह से निपट सकते हैं, जिसका अर्थ है कि यदि परिणाम अप्राप्य होगा, तो इसे निकटतम प्रतिनिधित्व योग्य मान से बदल दिया जाता है। (16-बिट अहस्ताक्षरित संतृप्ति के साथ, 65535 में कोई सकारात्मक राशि जोड़ने से 65535 निकलेगा।) कुछ प्रोसेसर एक अपवाद हैंडलिंग उत्पन्न कर सकते हैं यदि एक अंकगणितीय परिणाम उपलब्ध परिशुद्धता से अधिक है। जहां आवश्यक हो, अपवाद को पकड़ा जा सकता है और इससे पुनर्प्राप्त किया जा सकता है - उदाहरण के लिए, मनमाने ढंग से सटीक अंकगणित का उपयोग करके सॉफ़्टवेयर में ऑपरेशन को पुनरारंभ किया जा सकता है।
अंकगणितीय अतिप्रवाह से बचने के लिए मनमाना-परिशुद्धता अंकगणित का भी उपयोग किया जा सकता है, जो निश्चित-परिशुद्धता अंकगणित की अंतर्निहित सीमा है। 5-अंकीय [[ओडोमीटर]] के प्रदर्शन के समान, जो 99999 से 00000 में बदलता है, निश्चित-परिशुद्धता पूर्णांक [[पूर्णांक अतिप्रवाह]] प्रदर्शित कर सकता है यदि संख्या सटीकता के निश्चित स्तर पर प्रतिनिधित्व करने के लिए बहुत बड़ी हो जाती है। इसके बजाय कुछ प्रोसेसर [[संतृप्ति अंकगणित]] द्वारा अतिप्रवाह से निपट सकते हैं, जिसका अर्थ है कि यदि परिणाम अप्राप्य होगा, तो इसे निकटतम प्रतिनिधित्व योग्य मान से बदल दिया जाता है। (16-बिट अहस्ताक्षरित संतृप्ति के साथ, 65535 में कोई सकारात्मक राशि जोड़ने से 65535 निकलेगा।) कुछ प्रोसेसर अपवाद हैंडलिंग उत्पन्न कर सकते हैं यदि अंकगणितीय परिणाम उपलब्ध परिशुद्धता से अधिक है। जहां आवश्यक हो, अपवाद को पकड़ा जा सकता है और इससे पुनर्प्राप्त किया जा सकता है - उदाहरण के लिए, मनमाने ढंग से सटीक अंकगणित का उपयोग करके सॉफ़्टवेयर में ऑपरेशन को पुनरारंभ किया जा सकता है।


कई मामलों में, कार्य या प्रोग्रामर इस बात की गारंटी दे सकता है कि किसी विशिष्ट एप्लिकेशन में पूर्णांक मान अतिप्रवाह पैदा करने के लिए पर्याप्त रूप से बड़े नहीं होंगे। इस तरह की गारंटी व्यावहारिक सीमाओं पर आधारित हो सकती है: एक स्कूल उपस्थिति कार्यक्रम में 4,000 छात्रों की कार्य सीमा हो सकती है। एक प्रोग्रामर अभिकलन को डिज़ाइन कर सकता है ताकि मध्यवर्ती परिणाम निर्दिष्ट सटीक सीमाओं के भीतर रहें।
कई मामलों में, कार्य या प्रोग्रामर इस बात की गारंटी दे सकता है कि किसी विशिष्ट एप्लिकेशन में पूर्णांक मान अतिप्रवाह पैदा करने के लिए पर्याप्त रूप से बड़े नहीं होंगे। इस तरह की गारंटी व्यावहारिक सीमाओं पर आधारित हो सकती है: स्कूल उपस्थिति कार्यक्रम में 4,000 छात्रों की कार्य सीमा हो सकती है। प्रोग्रामर अभिकलन को डिज़ाइन कर सकता है ताकि मध्यवर्ती परिणाम निर्दिष्ट सटीक सीमाओं के भीतर रहें।


कुछ प्रोग्रामिंग लैंग्वेज जैसे कि [[लिस्प (प्रोग्रामिंग भाषा)]], पायथन (प्रोग्रामिंग लैंग्वेज), [[पर्ल]], [[हास्केल (प्रोग्रामिंग भाषा)]], [[रूबी (प्रोग्रामिंग भाषा)]] और [[राकू (प्रोग्रामिंग भाषा)]] का उपयोग करें, या उपयोग करने का विकल्प है, मनमाने ढंग से सटीक संख्याएँ सभी पूर्णांक अंकगणित। हालांकि यह प्रदर्शन को कम करता है, यह सरल अतिप्रवाह के कारण गलत परिणाम (या अपवाद) की संभावना को समाप्त करता है। यह गारंटी देना भी संभव बनाता है कि किसी विशेष मशीन के वर्ड (डेटा प्रकार) की परवाह किए बिना अंकगणितीय परिणाम सभी मशीनों पर समान होंगे। एक प्रोग्रामिंग भाषा में मनमाना-परिशुद्धता संख्याओं का अनन्य उपयोग भी भाषा को सरल करता है, क्योंकि एक संख्या एक संख्या है और सटीकता के विभिन्न स्तरों का प्रतिनिधित्व करने के लिए कई प्रकारों की आवश्यकता नहीं होती है।
कुछ प्रोग्रामिंग लैंग्वेज जैसे कि [[लिस्प (प्रोग्रामिंग भाषा)]], पायथन (प्रोग्रामिंग लैंग्वेज), [[पर्ल]], [[हास्केल (प्रोग्रामिंग भाषा)]], [[रूबी (प्रोग्रामिंग भाषा)]] और [[राकू (प्रोग्रामिंग भाषा)]] का उपयोग करें, या उपयोग करने का विकल्प है, मनमाने ढंग से सटीक संख्याएँ सभी पूर्णांक अंकगणित। हालांकि यह प्रदर्शन को कम करता है, यह सरल अतिप्रवाह के कारण गलत परिणाम (या अपवाद) की संभावना को समाप्त करता है। यह गारंटी देना भी संभव बनाता है कि किसी विशेष मशीन के वर्ड (डेटा प्रकार) की परवाह किए बिना अंकगणितीय परिणाम सभी मशीनों पर समान होंगे। प्रोग्रामिंग भाषा में मनमाना-परिशुद्धता संख्याओं का अनन्य उपयोग भी भाषा को सरल करता है, क्योंकि संख्या संख्या है और सटीकता के विभिन्न स्तरों का प्रतिनिधित्व करने के लिए कई प्रकारों की आवश्यकता नहीं होती है।


== कार्यान्वयन के मुद्दे ==
== कार्यान्वयन के मुद्दे ==


प्रोसेसर रजिस्टरों के भीतर पूरी तरह से फिट होने वाली संख्याओं का उपयोग करते हुए मनमाना-सटीक अंकगणित अंकगणित की तुलना में काफी धीमा है, क्योंकि बाद वाले आमतौर पर अंकगणितीय तर्क इकाई में लागू होते हैं जबकि पूर्व को सॉफ्टवेयर में लागू किया जाना चाहिए। यहां तक ​​​​कि अगर [[संगणक]] में कुछ संचालन (जैसे पूर्णांक विभाजन, या सभी फ़्लोटिंग-पॉइंट ऑपरेशंस) के लिए हार्डवेयर की कमी है और इसके बजाय सॉफ़्टवेयर प्रदान किया गया है, तो यह उपलब्ध हार्डवेयर रजिस्टरों से संबंधित संख्या आकारों का उपयोग करेगा: केवल एक या दो शब्द और निश्चित रूप से एन नहीं शब्द। अपवाद हैं, क्योंकि 1950 और 1960 के दशक की कुछ चर शब्द लंबाई वाली मशीन मशीनें, विशेष रूप से [[IBM 1620]], [[IBM 1401]] और हनीवेल लिबरेटर श्रृंखला, केवल उपलब्ध भंडारण से बंधी संख्याओं में हेरफेर कर सकती हैं, एक अतिरिक्त बिट के साथ जो मूल्य को सीमांकित करती है।
प्रोसेसर रजिस्टरों के भीतर पूरी तरह से फिट होने वाली संख्याओं का उपयोग करते हुए मनमाना-सटीक अंकगणित अंकगणित की तुलना में काफी धीमा है, क्योंकि बाद वाले आमतौर पर अंकगणितीय तर्क इकाई में लागू होते हैं जबकि पूर्व को सॉफ्टवेयर में लागू किया जाना चाहिए। यहां तक ​​​​कि अगर [[संगणक]] में कुछ संचालन (जैसे पूर्णांक विभाजन, या सभी फ़्लोटिंग-पॉइंट ऑपरेशंस) के लिए हार्डवेयर की कमी है और इसके बजाय सॉफ़्टवेयर प्रदान किया गया है, तो यह उपलब्ध हार्डवेयर रजिस्टरों से संबंधित संख्या आकारों का उपयोग करेगा: केवल या दो शब्द और निश्चित रूप से एन नहीं शब्द। अपवाद हैं, क्योंकि 1950 और 1960 के दशक की कुछ चर शब्द लंबाई वाली मशीन मशीनें, विशेष रूप से [[IBM 1620]], [[IBM 1401]] और हनीवेल लिबरेटर श्रृंखला, केवल उपलब्ध भंडारण से बंधी संख्याओं में हेरफेर कर सकती हैं, अतिरिक्त बिट के साथ जो मूल्य को सीमांकित करती है।


संख्याओं को एक [[निश्चित-बिंदु अंकगणित]] में संग्रहीत किया जा सकता है। निश्चित-बिंदु प्रारूप, या फ़्लोटिंग-पॉइंट प्रारूप में एक [[महत्व]] के रूप में और एक मनमाने ढंग से घातांक द्वारा गुणा किया जा सकता है। हालाँकि, चूंकि विभाजन लगभग तुरंत अंकों के असीम रूप से दोहराए जाने वाले अनुक्रमों (जैसे दशमलव में 4/7, या बाइनरी में 1/10) का परिचय देता है, क्या यह संभावना उत्पन्न होती है या तो प्रतिनिधित्व को कुछ संतोषजनक आकार में छोटा कर दिया जाएगा या फिर परिमेय संख्या होगी प्रयुक्त: अंश और हर के लिए एक बड़ा पूर्णांक। लेकिन सबसे बड़े सामान्य [[भाजक]] के विभाजित होने पर भी, परिमेय संख्याओं के साथ अंकगणित बहुत जल्दी बोझिल हो सकता है: 1/99 − 1/100 = 1/9900, और यदि 1/101 जोड़ा जाता है, तो परिणाम 10001/999900 होता है।
संख्याओं को [[निश्चित-बिंदु अंकगणित]] में संग्रहीत किया जा सकता है। निश्चित-बिंदु प्रारूप, या फ़्लोटिंग-पॉइंट प्रारूप में [[महत्व]] के रूप में और मनमाने ढंग से घातांक द्वारा गुणा किया जा सकता है। हालाँकि, चूंकि विभाजन लगभग तुरंत अंकों के असीम रूप से दोहराए जाने वाले अनुक्रमों (जैसे दशमलव में 4/7, या बाइनरी में 1/10) का परिचय देता है, क्या यह संभावना उत्पन्न होती है या तो प्रतिनिधित्व को कुछ संतोषजनक आकार में छोटा कर दिया जाएगा या फिर परिमेय संख्या होगी प्रयुक्त: अंश और हर के लिए बड़ा पूर्णांक। लेकिन सबसे बड़े सामान्य [[भाजक]] के विभाजित होने पर भी, परिमेय संख्याओं के साथ अंकगणित बहुत जल्दी बोझिल हो सकता है: 1/99 − 1/100 = 1/9900, और यदि 1/101 जोड़ा जाता है, तो परिणाम 10001/999900 होता है।


मनमाना-सटीक संख्याओं का आकार अभ्यास में उपलब्ध कुल भंडारण और गणना समय द्वारा सीमित है।
मनमाना-सटीक संख्याओं का आकार अभ्यास में उपलब्ध कुल भंडारण और गणना समय द्वारा सीमित है।
Line 29: Line 28:
मनमाना परिशुद्धता के साथ संग्रहीत संख्याओं पर कुशलतापूर्वक अंकगणितीय संचालन करने के लिए कई [[एल्गोरिदम]] विकसित किए गए हैं। विशेष रूप से, मान लीजिए {{math|''N''}} अंक नियोजित हैं, एल्गोरिदम को बड़े पैमाने पर एसिम्प्टोटिक [[कम्प्यूटेशनल जटिलता सिद्धांत]] को कम करने के लिए डिज़ाइन किया गया है {{math|''N''}}.
मनमाना परिशुद्धता के साथ संग्रहीत संख्याओं पर कुशलतापूर्वक अंकगणितीय संचालन करने के लिए कई [[एल्गोरिदम]] विकसित किए गए हैं। विशेष रूप से, मान लीजिए {{math|''N''}} अंक नियोजित हैं, एल्गोरिदम को बड़े पैमाने पर एसिम्प्टोटिक [[कम्प्यूटेशनल जटिलता सिद्धांत]] को कम करने के लिए डिज़ाइन किया गया है {{math|''N''}}.


सबसे सरल एल्गोरिद्म जोड़ और [[घटाव]] के लिए हैं, जहां कोई अंकों को अनुक्रम में जोड़ता या घटाता है, आवश्यकतानुसार ले जाता है, जिससे एक अंक प्राप्त होता है। {{math|O(''N'')}} एल्गोरिदम ([[बिग ओ नोटेशन]] देखें)।
सबसे सरल एल्गोरिद्म जोड़ और [[घटाव]] के लिए हैं, जहां कोई अंकों को अनुक्रम में जोड़ता या घटाता है, आवश्यकतानुसार ले जाता है, जिससे अंक प्राप्त होता है। {{math|O(''N'')}} एल्गोरिदम ([[बिग ओ नोटेशन]] देखें)।


[[तुलना (कंप्यूटर प्रोग्रामिंग)]] भी बहुत आसान है। अंतर मिलने तक उच्च-क्रम के अंकों (या मशीन शब्द) की तुलना करें। शेष अंकों/शब्दों की तुलना करना आवश्यक नहीं है। सबसे बुरा हाल है {{math|<math>\Theta</math>(''N'')}}, लेकिन आमतौर पर यह बहुत तेज हो जाएगा।
[[तुलना (कंप्यूटर प्रोग्रामिंग)]] भी बहुत आसान है। अंतर मिलने तक उच्च-क्रम के अंकों (या मशीन शब्द) की तुलना करें। शेष अंकों/शब्दों की तुलना करना आवश्यक नहीं है। सबसे बुरा हाल है {{math|<math>\Theta</math>(''N'')}}, लेकिन आमतौर पर यह बहुत तेज हो जाएगा।


गुणन के लिए, संख्याओं को हाथ से [[गुणा]] करने के लिए उपयोग किए जाने वाले सबसे सरल एल्गोरिदम (जैसा कि प्राथमिक विद्यालय में पढ़ाया जाता है) की आवश्यकता होती है {{math|<math>\Theta</math>(''N''<sup>2</sup>)}} संचालन, लेकिन गुणन एल्गोरिदम जो प्राप्त करते हैं {{math|O(''N''&nbsp;log(''N'')&nbsp;log(log(''N'')))}} जटिलता को तैयार किया गया है, जैसे शॉनहेज-स्ट्रैसन एल्गोरिदम, जो तेजी से फूरियर रूपांतरण पर आधारित है, और थोड़ी खराब जटिलता वाले एल्गोरिदम भी हैं, लेकिन कभी-कभी छोटे के लिए बेहतर वास्तविक दुनिया के प्रदर्शन के साथ {{math|''N''}}. [[करत्सुबा एल्गोरिथम]] गुणन एक ऐसा एल्गोरिथम है।
गुणन के लिए, संख्याओं को हाथ से [[गुणा]] करने के लिए उपयोग किए जाने वाले सबसे सरल एल्गोरिदम (जैसा कि प्राथमिक विद्यालय में पढ़ाया जाता है) की आवश्यकता होती है {{math|<math>\Theta</math>(''N''<sup>2</sup>)}} संचालन, लेकिन गुणन एल्गोरिदम जो प्राप्त करते हैं {{math|O(''N''&nbsp;log(''N'')&nbsp;log(log(''N'')))}} जटिलता को तैयार किया गया है, जैसे शॉनहेज-स्ट्रैसन एल्गोरिदम, जो तेजी से फूरियर रूपांतरण पर आधारित है, और थोड़ी खराब जटिलता वाले एल्गोरिदम भी हैं, लेकिन कभी-कभी छोटे के लिए बेहतर वास्तविक दुनिया के प्रदर्शन के साथ {{math|''N''}}. [[करत्सुबा एल्गोरिथम]] गुणन ऐसा एल्गोरिथम है।


डिवीजन (गणित) के लिए, [[विभाजन एल्गोरिथ्म]] देखें।
डिवीजन (गणित) के लिए, [[विभाजन एल्गोरिथ्म]] देखें।
Line 45: Line 44:


== उदाहरण ==
== उदाहरण ==
[[कारख़ाने का]] की गणना आसानी से बहुत बड़ी संख्या उत्पन्न कर सकती है। यह कई फ़ार्मुलों (जैसे [[टेलर श्रृंखला]]) में उनके उपयोग के लिए कोई समस्या नहीं है क्योंकि वे अन्य शब्दों के साथ दिखाई देते हैं, ताकि - मूल्यांकन के क्रम पर सावधानीपूर्वक ध्यान दिया जाए - मध्यवर्ती गणना मान परेशानी न करें। यदि फैक्टोरियल संख्याओं के अनुमानित मान वांछित हैं, स्टर्लिंग का सन्निकटन फ्लोटिंग-पॉइंट अंकगणित का उपयोग करके अच्छे परिणाम देता है। एक निश्चित-आकार पूर्णांक चर के लिए सबसे बड़ा प्रतिनिधित्व योग्य मान अपेक्षाकृत छोटे तर्कों के लिए भी पार किया जा सकता है जैसा कि नीचे दी गई तालिका में दिखाया गया है। यहां तक ​​कि फ्लोटिंग-पॉइंट नंबर भी जल्द ही आउटरेंज हो जाते हैं, इसलिए यह संख्या के लघुगणक के संदर्भ में गणना को फिर से तैयार करने में मदद कर सकता है।
[[कारख़ाने का]] की गणना आसानी से बहुत बड़ी संख्या उत्पन्न कर सकती है। यह कई फ़ार्मुलों (जैसे [[टेलर श्रृंखला]]) में उनके उपयोग के लिए कोई समस्या नहीं है क्योंकि वे अन्य शब्दों के साथ दिखाई देते हैं, ताकि - मूल्यांकन के क्रम पर सावधानीपूर्वक ध्यान दिया जाए - मध्यवर्ती गणना मान परेशानी न करें। यदि फैक्टोरियल संख्याओं के अनुमानित मान वांछित हैं, स्टर्लिंग का सन्निकटन फ्लोटिंग-पॉइंट अंकगणित का उपयोग करके अच्छे परिणाम देता है। निश्चित-आकार पूर्णांक चर के लिए सबसे बड़ा प्रतिनिधित्व योग्य मान अपेक्षाकृत छोटे तर्कों के लिए भी पार किया जा सकता है जैसा कि नीचे दी गई तालिका में दिखाया गया है। यहां तक ​​कि फ्लोटिंग-पॉइंट नंबर भी जल्द ही आउटरेंज हो जाते हैं, इसलिए यह संख्या के लघुगणक के संदर्भ में गणना को फिर से तैयार करने में मदद कर सकता है।


लेकिन अगर बड़े फैक्टोरियल के लिए सटीक मान वांछित हैं, तो विशेष सॉफ्टवेयर की आवश्यकता होती है, जैसा कि छद्म कोड में होता है, जो 1, 1×2, 1×2×3, 1×2×3×4 की गणना करने के लिए क्लासिक एल्गोरिदम को लागू करता है। आदि क्रमिक भाज्य संख्याएँ।
लेकिन अगर बड़े फैक्टोरियल के लिए सटीक मान वांछित हैं, तो विशेष सॉफ्टवेयर की आवश्यकता होती है, जैसा कि छद्म कोड में होता है, जो 1, 1×2, 1×2×3, 1×2×3×4 की गणना करने के लिए क्लासिक एल्गोरिदम को लागू करता है। आदि क्रमिक भाज्य संख्याएँ।


  स्थिर सीमा = 1000; % पर्याप्त अंक।
  स्थिर सीमा = 1000; % पर्याप्त अंक।
  स्थिर आधार = 10; % सिम्युलेटेड अंकगणित का आधार।
  स्थिर आधार = 10;;% सिम्युलेटेड अंकगणित का आधार।
  लगातार फैक्टोरियल लिमिट = 365; हल करने के लिए % लक्ष्य संख्या, 365!
  लगातार फैक्टोरियल लिमिट = 365; हल करने के लिए�% लक्ष्य संख्या, 365!
  ऐरे अंक [1: सीमा] पूर्णांक का; % बड़ी संख्या।
  ऐरे अंक [1: सीमा] पूर्णांक का;% बड़ी संख्या।
  पूर्णांक कैरी, डी; गुणन के दौरान % सहायक।
  पूर्णांक कैरी, डी; गुणन के दौरान�% सहायक।
  पूर्णांक अंतिम, i; बड़ी संख्या के अंकों के लिए % सूचकांक।
  पूर्णांक अंतिम, i; बड़ी संख्या के अंकों के लिए�% सूचकांक।
  सरणी पाठ [1: सीमा] चरित्र का; आउटपुट के लिए % स्क्रैचपैड।
  सरणी पाठ [1: सीमा] चरित्र का; आउटपुट के लिए�% स्क्रैचपैड।
  लगातार tdigit [0:9] वर्ण का = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ];
  लगातार tdigit [0:9] वर्ण का = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ];
  'शुरू'
  'शुरू'
   अंक:=0; % संपूर्ण सरणी साफ़ करें।
   अंक:=0;% संपूर्ण सरणी साफ़ करें।
   अंक [1]: = 1; % बड़ी संख्या 1 से शुरू होती है,
   अंक [1]: = 1; % बड़ी संख्या 1 से शुरू होती है,
   अंतिम:=1; % इसका उच्चतम क्रम अंक संख्या 1 है।
   अंतिम:=1;% इसका उच्चतम क्रम अंक संख्या 1 है।
   'फॉर' एन:=1 'टू' फैक्टोरियललिमिट 'डू' % स्टेप थ्रू प्रोडक्शन 1!, 2!, 3!, 4!, आदि।
   'फॉर' एन:=1 'टू' फैक्टोरियललिमिट 'डू'% स्टेप थ्रू प्रोडक्शन 1!, 2!, 3!, 4!, आदि।
  कैरी: = 0; % n से गुणा प्रारंभ करें।
  कैरी: = 0;% n से गुणा प्रारंभ करें।
  'for' i:=1 'to' last 'do' % स्टेप हर डिजिट के साथ।
  'for' i:=1 'to' last 'do''% स्टेप हर डिजिट के साथ।
    डी: = अंक [i] * एन + कैरी; % क्लासिक गुणा।
  डी: = अंक [i] * एन + कैरी;+% क्लासिक गुणा।
    अंक [i]: = डी 'मॉड' बेस; % परिणाम का निम्न-क्रम अंक।
  अंक [i]: = डी 'मॉड' बेस;% परिणाम का निम्न-क्रम अंक।
    कैरी: = डी 'डिव' बेस; % अगले अंक तक ले जाना।
  कैरी: = डी 'डिव' बेस;% अगले अंक तक ले जाना।
  'अगला मैं;
  'अगला मैं;
  'जबकि' कैरी> 0% कैरी को बड़ी संख्या में स्टोर करें।
  'जबकि' कैरी> 0% कैरी को बड़ी संख्या में स्टोर करें।
    'अगर' अंतिम> = सीमा 'फिर' क्रोक (अतिप्रवाह!); % अगर संभव हो तो!
  'अगर' अंतिम> = सीमा 'फिर' क्रोक (अतिप्रवाह!);% अगर संभव हो तो!
    अंतिम: = अंतिम + 1; % एक और अंक।
  अंतिम: = अंतिम + 1; % और अंक।
    अंक [आखिरी]: = 'मॉड' बेस कैरी करें; % रखा हे।
  अंक [आखिरी]: = 'मॉड' बेस कैरी करें;% रखा हे।
    कैरी: = कैरी 'डिव' बेस; % कैरी कम हो गया।
  कैरी: = कैरी 'डिव' बेस; % कैरी कम हो गया।
  'Wend' % n > बेस के साथ, हो सकता है > 1 अंक अतिरिक्त।
  'Wend'% n > बेस के साथ, हो सकता है > 1 अंक अतिरिक्त।
  पाठ: =; % अब आउटपुट तैयार करें।
  पाठ: =;% अब आउटपुट तैयार करें।
  'for' i:=1 'to' last 'do'% बाइनरी से टेक्स्ट में ट्रांसलेट करें।
  'for' i:=1 'to' last 'do'% बाइनरी से टेक्स्ट में ट्रांसलेट करें।
    पाठ [सीमा - i + 1]: = tdigit [अंक [i;] % क्रम उलट रहा है।
  पाठ [सीमा - i + 1]: = tdigit [अंक [i;]]% क्रम उलट रहा है।
  'अगला मैं; % अरबी अंक निम्न क्रम को अंत में रखते हैं।
  'अगला मैं;
  'प्रिंट' टेक्स्ट, = ,n, ! ; % परिणाम प्रिंट करें!
% अरबी अंक निम्न क्रम को अंत में रखते हैं।
   'अगला' एन; अगले फैक्टोरियल तक % चालू।
  'प्रिंट' टेक्स्ट, = ,n, !;% परिणाम प्रिंट करें!
   'अगला' एन; अगले फैक्टोरियल तक�% चालू।
  'अंत';
  'अंत';


उदाहरण को ध्यान में रखते हुए, कई विवरणों पर चर्चा की जा सकती है। सबसे महत्वपूर्ण बड़ी संख्या के प्रतिनिधित्व का चुनाव है। इस मामले में, अंकों के लिए केवल पूर्णांक मानों की आवश्यकता होती है, इसलिए निश्चित-चौड़ाई वाले पूर्णांकों की एक सरणी पर्याप्त होती है। सरणी के लगातार तत्वों को आधार की उच्च शक्तियों का प्रतिनिधित्व करना सुविधाजनक है।
उदाहरण को ध्यान में रखते हुए, कई विवरणों पर चर्चा की जा सकती है। सबसे महत्वपूर्ण बड़ी संख्या के प्रतिनिधित्व का चुनाव है। इस मामले में, अंकों के लिए केवल पूर्णांक मानों की आवश्यकता होती है, इसलिए निश्चित-चौड़ाई वाले पूर्णांकों की सरणी पर्याप्त होती है। सरणी के लगातार तत्वों को आधार की उच्च शक्तियों का प्रतिनिधित्व करना सुविधाजनक है।


दूसरा सबसे महत्वपूर्ण निर्णय अंकगणित के आधार के चुनाव में है, यहाँ दस। कई विचार हैं। स्क्रैचपैड चर {{mvar|d}} एक-अंक के गुणा के परिणाम को धारण करने में सक्षम होना चाहिए और पिछले अंक के गुणन से वहन करना चाहिए। आधार दस में, सोलह-बिट पूर्णांक निश्चित रूप से पर्याप्त है क्योंकि यह 32767 तक की अनुमति देता है। हालाँकि, यह उदाहरण धोखा देता है, जिसमें का मान {{mvar|n}} स्वयं एक अंक तक सीमित नहीं है। इसका परिणाम यह होता है कि यह विधि विफल हो जाएगी {{math|''n'' > 3200}} या ऐसा। अधिक सामान्य कार्यान्वयन में, {{mvar|n}} बहु-अंकीय प्रतिनिधित्व का भी उपयोग करेगा। शॉर्टकट का दूसरा परिणाम यह है कि मल्टी-डिजिट गुणा पूरा होने के बाद, कैरी के अंतिम मूल्य को केवल एक ही नहीं, बल्कि कई उच्च-क्रम अंकों में ले जाने की आवश्यकता हो सकती है।
दूसरा सबसे महत्वपूर्ण निर्णय अंकगणित के आधार के चुनाव में है, यहाँ दस। कई विचार हैं। स्क्रैचपैड चर {{mvar|d}} एक-अंक के गुणा के परिणाम को धारण करने में सक्षम होना चाहिए और पिछले अंक के गुणन से वहन करना चाहिए। आधार दस में, सोलह-बिट पूर्णांक निश्चित रूप से पर्याप्त है क्योंकि यह 32767 तक की अनुमति देता है। हालाँकि, यह उदाहरण धोखा देता है, जिसमें का मान {{mvar|n}} स्वयं अंक तक सीमित नहीं है। इसका परिणाम यह होता है कि यह विधि विफल हो जाएगी {{math|''n'' > 3200}} या ऐसा। अधिक सामान्य कार्यान्वयन में, {{mvar|n}} बहु-अंकीय प्रतिनिधित्व का भी उपयोग करेगा। शॉर्टकट का दूसरा परिणाम यह है कि मल्टी-डिजिट गुणा पूरा होने के बाद, कैरी के अंतिम मूल्य को केवल ही नहीं, बल्कि कई उच्च-क्रम अंकों में ले जाने की आवश्यकता हो सकती है।


मानव विचार के लिए परिणाम को आधार दस में प्रिंट करने का मुद्दा भी है। क्योंकि आधार पहले से ही दस है, परिणाम केवल सरणी अंकों के क्रमिक अंकों को प्रिंट करके दिखाया जा सकता है, लेकिन वे उच्चतम-क्रम अंक के साथ अंतिम रूप से दिखाई देंगे (ताकि 123 321 के रूप में दिखाई दे)। पूरे सरणी को उल्टे क्रम में मुद्रित किया जा सकता है, लेकिन वह संख्या को अग्रणी शून्य ( 00000...000123 ) के साथ प्रस्तुत करेगा, जिसकी सराहना नहीं की जा सकती है, इसलिए यह कार्यान्वयन अंतरिक्ष-गद्देदार पाठ चर में प्रतिनिधित्व बनाता है और फिर उसे प्रिंट करता है। पहले कुछ परिणाम (प्रत्येक पाँचवें अंक में रिक्ति और यहाँ जोड़े गए एनोटेशन के साथ) हैं:
मानव विचार के लिए परिणाम को आधार दस में प्रिंट करने का मुद्दा भी है। क्योंकि आधार पहले से ही दस है, परिणाम केवल सरणी अंकों के क्रमिक अंकों को प्रिंट करके दिखाया जा सकता है, लेकिन वे उच्चतम-क्रम अंक के साथ अंतिम रूप से दिखाई देंगे (ताकि 123 321 के रूप में दिखाई दे)। पूरे सरणी को उल्टे क्रम में मुद्रित किया जा सकता है, लेकिन वह संख्या को अग्रणी शून्य ( 00000...000123 ) के साथ प्रस्तुत करेगा, जिसकी सराहना नहीं की जा सकती है, इसलिए यह कार्यान्वयन अंतरिक्ष-गद्देदार पाठ चर में प्रतिनिधित्व बनाता है और फिर उसे प्रिंट करता है। पहले कुछ परिणाम (प्रत्येक पाँचवें अंक में रिक्ति और यहाँ जोड़े गए एनोटेशन के साथ) हैं:
Line 167: Line 167:
| 1 03331 47966 38614 49296 66651 33752 32000 00000 = || 35!
| 1 03331 47966 38614 49296 66651 33752 32000 00000 = || 35!
|}
|}
यह कार्यान्वयन कंप्यूटर के अंतर्निहित अंकगणित का अधिक प्रभावी उपयोग कर सकता है। आधार 100 (आउटपुट के लिए अनुवाद प्रक्रिया में संबंधित परिवर्तनों के साथ) का उपयोग करने के लिए एक साधारण वृद्धि होगी, या, पर्याप्त रूप से विस्तृत कंप्यूटर चर (जैसे 32-बिट पूर्णांक) के साथ हम 10,000 जैसे बड़े आधारों का उपयोग कर सकते हैं। कंप्यूटर के बिल्ट-इन पूर्णांक संचालन के करीब पावर-ऑफ-2 बेस में काम करने से लाभ मिलता है, हालांकि आउटपुट के लिए दशमलव आधार में रूपांतरण अधिक कठिन हो जाता है। विशिष्ट आधुनिक कंप्यूटरों पर, परिवर्धन और गुणन, संकार्यों के मूल्यों से स्वतंत्र निरंतर समय लेते हैं (जब तक कि संकार्य एकल मशीन शब्दों में फिट होते हैं), इसलिए प्रत्येक तत्व में जितना संभव हो उतना बड़ी संख्या में पैकिंग में बड़े लाभ होते हैं। अंकों की सरणी। कंप्यूटर किसी उत्पाद को एक अंक में विभाजित करने और उदाहरण के रूप में मॉड और डिव के दो संचालन की आवश्यकता के बिना ले जाने की सुविधा भी प्रदान कर सकता है, और लगभग सभी अंकगणितीय इकाइयाँ एक [[झंडा ले जाना]] प्रदान करती हैं जिसका उपयोग बहु-सटीक जोड़ और घटाव में किया जा सकता है। इस प्रकार का विवरण मशीन-कोड प्रोग्रामर का ग्रिस्ट है, और एक उपयुक्त असेंबली-लैंग्वेज बिगनंबर रूटीन उच्च-स्तरीय भाषा के संकलन के परिणाम की तुलना में बहुत तेजी से चल सकता है, जो ऐसी सुविधाओं तक पहुंच प्रदान नहीं करता है।
यह कार्यान्वयन कंप्यूटर के अंतर्निहित अंकगणित का अधिक प्रभावी उपयोग कर सकता है। आधार 100 (आउटपुट के लिए अनुवाद प्रक्रिया में संबंधित परिवर्तनों के साथ) का उपयोग करने के लिए साधारण वृद्धि होगी, या, पर्याप्त रूप से विस्तृत कंप्यूटर चर (जैसे 32-बिट पूर्णांक) के साथ हम 10,000 जैसे बड़े आधारों का उपयोग कर सकते हैं। कंप्यूटर के बिल्ट-इन पूर्णांक संचालन के करीब पावर-ऑफ-2 बेस में काम करने से लाभ मिलता है, हालांकि आउटपुट के लिए दशमलव आधार में रूपांतरण अधिक कठिन हो जाता है। विशिष्ट आधुनिक कंप्यूटरों पर, परिवर्धन और गुणन, संकार्यों के मूल्यों से स्वतंत्र निरंतर समय लेते हैं (जब तक कि संकार्य एकल मशीन शब्दों में फिट होते हैं), इसलिए प्रत्येक तत्व में जितना संभव हो उतना बड़ी संख्या में पैकिंग में बड़े लाभ होते हैं। अंकों की सरणी। कंप्यूटर किसी उत्पाद को अंक में विभाजित करने और उदाहरण के रूप में मॉड और डिव के दो संचालन की आवश्यकता के बिना ले जाने की सुविधा भी प्रदान कर सकता है, और लगभग सभी अंकगणितीय इकाइयाँ [[झंडा ले जाना]] प्रदान करती हैं जिसका उपयोग बहु-सटीक जोड़ और घटाव में किया जा सकता है। इस प्रकार का विवरण मशीन-कोड प्रोग्रामर का ग्रिस्ट है, और उपयुक्त असेंबली-लैंग्वेज बिगनंबर रूटीन उच्च-स्तरीय भाषा के संकलन के परिणाम की तुलना में बहुत तेजी से चल सकता है, जो ऐसी सुविधाओं तक पहुंच प्रदान नहीं करता है।


एकल-अंकों के गुणा के लिए कार्यशील चर को मान (आधार-1) रखने में सक्षम होना चाहिए{{sup|2}} + कैरी, जहां कैरी का अधिकतम मूल्य (आधार-1) है। इसी तरह, अंकों की सरणी को अनुक्रमित करने के लिए उपयोग किए जाने वाले चर स्वयं चौड़ाई में सीमित होते हैं। सूचकांकों का विस्तार करने का एक आसान तरीका कुछ सुविधाजनक आकार के ब्लॉक में बड़ी संख्या के अंकों से निपटना होगा ताकि एड्रेसिंग (ब्लॉक i, अंक j) के माध्यम से हो, जहां i और j छोटे पूर्णांक होंगे, या कोई आगे बढ़ सकता है इंडेक्सिंग वेरिएबल्स के लिए बिगनंबर तकनीकों को नियोजित करना। अंततः, मशीन भंडारण क्षमता और निष्पादन समय समस्या के आकार पर सीमाएँ लगाते हैं।
एकल-अंकों के गुणा के लिए कार्यशील चर को मान (आधार-1) रखने में सक्षम होना चाहिए{{sup|2}} + कैरी, जहां कैरी का अधिकतम मूल्य (आधार-1) है। इसी तरह, अंकों की सरणी को अनुक्रमित करने के लिए उपयोग किए जाने वाले चर स्वयं चौड़ाई में सीमित होते हैं। सूचकांकों का विस्तार करने का आसान तरीका कुछ सुविधाजनक आकार के ब्लॉक में बड़ी संख्या के अंकों से निपटना होगा ताकि एड्रेसिंग (ब्लॉक i, अंक j) के माध्यम से हो, जहां i और j छोटे पूर्णांक होंगे, या कोई आगे बढ़ सकता है इंडेक्सिंग वेरिएबल्स के लिए बिगनंबर तकनीकों को नियोजित करना। अंततः, मशीन भंडारण क्षमता और निष्पादन समय समस्या के आकार पर सीमाएँ लगाते हैं।


== इतिहास ==
== इतिहास ==
1950 के दशक के मध्य में IBM का पहला व्यावसायिक कंप्यूटर, [[IBM 702]] (एक [[वेक्यूम - ट्यूब]] मशीन), पूर्णांक अंकगणित को 1 से 511 अंकों की किसी भी लंबाई के अंकों के तार पर पूरी तरह से हार्डवेयर में लागू किया। मनमाना-सटीक अंकगणित का सबसे पहला व्यापक सॉफ्टवेयर कार्यान्वयन संभवतः [[Maclisp]] में था। बाद में, 1980 के आसपास, [[ऑपरेटिंग सिस्टम]] VAX/VMS और VM/CMS ने एक मामले में [[शाब्दिक स्ट्रिंग]] [[Subprogram]] के संग्रह के रूप में और दूसरे में [[EXEC 2]] और REXX भाषाओं में बिग्नम सुविधाओं की पेशकश की।
1950 के दशक के मध्य में IBM का पहला व्यावसायिक कंप्यूटर, [[IBM 702]] (एक [[वेक्यूम - ट्यूब]] मशीन), पूर्णांक अंकगणित को 1 से 511 अंकों की किसी भी लंबाई के अंकों के तार पर पूरी तरह से हार्डवेयर में लागू किया। मनमाना-सटीक अंकगणित का सबसे पहला व्यापक सॉफ्टवेयर कार्यान्वयन संभवतः [[Maclisp]] में था। बाद में, 1980 के आसपास, [[ऑपरेटिंग सिस्टम]] VAX/VMS और VM/CMS ने मामले में [[शाब्दिक स्ट्रिंग]] [[Subprogram]] के संग्रह के रूप में और दूसरे में [[EXEC 2]] और REXX भाषाओं में बिग्नम सुविधाओं की पेशकश की।


1959-1970 के आईबीएम 1620 के माध्यम से एक प्रारंभिक व्यापक कार्यान्वयन उपलब्ध था। 1620 एक दशमलव-अंकीय मशीन थी जो असतत ट्रांजिस्टर का उपयोग करती थी, फिर भी इसमें एक लंबाई के अंकों के तार पर पूर्णांक अंकगणित करने के लिए हार्डवेयर (जो [[तालिका देखो]] का उपयोग किया गया था) था जो दो से लेकर जो भी मेमोरी उपलब्ध थी। फ़्लोटिंग-पॉइंट अंकगणित के लिए, मंटिसा सौ अंकों या उससे कम तक सीमित था, और एक्सपोनेंट केवल दो अंकों तक ही सीमित था। आपूर्ति की गई सबसे बड़ी मेमोरी 60 000 अंकों की पेशकश करती है, हालांकि 1620 के लिए [[फोरट्रान]] कंपाइलर निश्चित आकार जैसे 10 पर बसे, हालांकि इसे नियंत्रण कार्ड पर निर्दिष्ट किया जा सकता है यदि डिफ़ॉल्ट संतोषजनक नहीं था।
1959-1970 के आईबीएम 1620 के माध्यम से प्रारंभिक व्यापक कार्यान्वयन उपलब्ध था। 1620 दशमलव-अंकीय मशीन थी जो असतत ट्रांजिस्टर का उपयोग करती थी, फिर भी इसमें लंबाई के अंकों के तार पर पूर्णांक अंकगणित करने के लिए हार्डवेयर (जो [[तालिका देखो]] का उपयोग किया गया था) था जो दो से लेकर जो भी मेमोरी उपलब्ध थी। फ़्लोटिंग-पॉइंट अंकगणित के लिए, मंटिसा सौ अंकों या उससे कम तक सीमित था, और एक्सपोनेंट केवल दो अंकों तक ही सीमित था। आपूर्ति की गई सबसे बड़ी मेमोरी 60 000 अंकों की पेशकश करती है, हालांकि 1620 के लिए [[फोरट्रान]] कंपाइलर निश्चित आकार जैसे 10 पर बसे, हालांकि इसे नियंत्रण कार्ड पर निर्दिष्ट किया जा सकता है यदि डिफ़ॉल्ट संतोषजनक नहीं था।


== सॉफ्टवेयर लाइब्रेरी ==
== सॉफ्टवेयर लाइब्रेरी ==
{{See also|List of arbitrary-precision arithmetic software}}
{{See also|List of arbitrary-precision arithmetic software}}
अधिकांश कंप्यूटर सॉफ़्टवेयर में मनमाना-परिशुद्धता अंकगणित एक बाहरी [[पुस्तकालय (कंप्यूटर विज्ञान)]] को कॉल करके कार्यान्वित किया जाता है जो अनुरोधित सटीकता के साथ संख्याओं को संग्रहीत करने और संगणना करने के लिए [[डेटा प्रकार]] और [[सबरूटीन]] प्रदान करता है।
अधिकांश कंप्यूटर सॉफ़्टवेयर में मनमाना-परिशुद्धता अंकगणित बाहरी [[पुस्तकालय (कंप्यूटर विज्ञान)]] को कॉल करके कार्यान्वित किया जाता है जो अनुरोधित सटीकता के साथ संख्याओं को संग्रहीत करने और संगणना करने के लिए [[डेटा प्रकार]] और [[सबरूटीन]] प्रदान करता है।


विभिन्न पुस्तकालयों में मनमाना-सटीक संख्याओं का प्रतिनिधित्व करने के विभिन्न तरीके हैं, कुछ पुस्तकालय केवल पूर्णांक संख्याओं के साथ काम करते हैं, अन्य विभिन्न आधारों (दशमलव या द्विआधारी शक्तियों) में [[तैरनेवाला स्थल]] नंबरों को संग्रहीत करते हैं। एकल मान के रूप में एक संख्या का प्रतिनिधित्व करने के बजाय, कुछ स्टोर नंबर एक अंश/भाजक जोड़ी ([[तर्कसंगत संख्या]]) के रूप में और कुछ पूरी तरह से गणना योग्य संख्याओं का प्रतिनिधित्व कर सकते हैं, हालांकि केवल कुछ भंडारण सीमा तक। मौलिक रूप से, [[ट्यूरिंग मशीन]]ें [[प्रमुखता]] के रूप में सभी [[वास्तविक संख्या]]ओं का प्रतिनिधित्व नहीं कर सकती हैं <math>\mathbb{R}</math> की कार्डिनैलिटी से अधिक है <math>\mathbb{Z}</math>.
विभिन्न पुस्तकालयों में मनमाना-सटीक संख्याओं का प्रतिनिधित्व करने के विभिन्न तरीके हैं, कुछ पुस्तकालय केवल पूर्णांक संख्याओं के साथ काम करते हैं, अन्य विभिन्न आधारों (दशमलव या द्विआधारी शक्तियों) में [[तैरनेवाला स्थल]] नंबरों को संग्रहीत करते हैं। एकल मान के रूप में संख्या का प्रतिनिधित्व करने के बजाय, कुछ स्टोर नंबर अंश/भाजक जोड़ी ([[तर्कसंगत संख्या]]) के रूप में और कुछ पूरी तरह से गणना योग्य संख्याओं का प्रतिनिधित्व कर सकते हैं, हालांकि केवल कुछ भंडारण सीमा तक। मौलिक रूप से, [[ट्यूरिंग मशीन]]ें [[प्रमुखता]] के रूप में सभी [[वास्तविक संख्या]]ओं का प्रतिनिधित्व नहीं कर सकती हैं <math>\mathbb{R}</math> की कार्डिनैलिटी से अधिक है <math>\mathbb{Z}</math>.


== यह भी देखें ==
== यह भी देखें ==
Line 203: Line 203:
* [https://web.archive.org/web/20101019002107/http://oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_9/CH09-3.html#HEADING3-1 Chapter 9.3 of ''The Art of Assembly''] by [[Randall Hyde]] discusses multiprecision arithmetic, with examples in [[x86]]-assembly.
* [https://web.archive.org/web/20101019002107/http://oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_9/CH09-3.html#HEADING3-1 Chapter 9.3 of ''The Art of Assembly''] by [[Randall Hyde]] discusses multiprecision arithmetic, with examples in [[x86]]-assembly.
* Rosetta Code task [http://rosettacode.org/wiki/Arbitrary-precision_integers_%28included%29 Arbitrary-precision integers] Case studies in the style in which over 95 programming languages compute the value of 5**4**3**2 using arbitrary precision arithmetic.
* Rosetta Code task [http://rosettacode.org/wiki/Arbitrary-precision_integers_%28included%29 Arbitrary-precision integers] Case studies in the style in which over 95 programming languages compute the value of 5**4**3**2 using arbitrary precision arithmetic.
{{data types}}
[[Category: कंप्यूटर अंकगणित]] [[Category: कंप्यूटर अंकगणितीय एल्गोरिदम]]  
[[Category: कंप्यूटर अंकगणित]] [[Category: कंप्यूटर अंकगणितीय एल्गोरिदम]]  



Revision as of 09:20, 25 July 2023

कंप्यूटर विज्ञान में, मनमाना-सटीक अंकगणित, जिसे बिग्नम अंकगणित, बहु-सटीक अंकगणित, या कभी-कभी अनंत-परिशुद्धता अंकगणित भी कहा जाता है, यह इंगित करता है कि गणना उन संख्याओं पर की जाती है जिनके संख्यात्मक अंकों की सटीकता (अंकगणित) केवल उपलब्ध मेमोरी (कंप्यूटर) द्वारा सीमित होती है। ) मेजबान प्रणाली का। यह अधिकांश अंकगणितीय तर्क इकाई (एएलयू) हार्डवेयर में पाए जाने वाले तेज़ निश्चित-परिशुद्धता अंकगणित के विपरीत है, जो आमतौर पर 8 और 64 अंश्स के बीच सटीकता प्रदान करता है।

कई आधुनिक प्रोग्रामिंग भाषाओं में बिग्नम के लिए अंतर्निहित समर्थन है,[1][2][3][4] और अन्य के पास मनमाना-परिशुद्धता पूर्णांक_ (कंप्यूटर_साइंस) और तैरनेवाला स्थल गणित के लिए पुस्तकालय उपलब्ध हैं। प्रोसेसर रजिस्टर के आकार से संबंधित बिट्स की निश्चित संख्या के रूप में मानों को संग्रहीत करने के बजाय, ये कार्यान्वयन आमतौर पर अंकों की चर-लंबाई सरणी डेटा संरचना का उपयोग करते हैं।

मनमाना परिशुद्धता का उपयोग उन अनुप्रयोगों में किया जाता है जहां अंकगणित की गति सीमित कारक नहीं है, या जहां बहुत बड़ी संख्या के साथ फ़्लोटिंग पॉइंट त्रुटि शमन की आवश्यकता होती है। इसे कई कंप्यूटर बीजगणित प्रणालियों द्वारा प्रदान की जाने वाली प्रतीकात्मक संगणना के साथ भ्रमित नहीं होना चाहिए, जो भावों द्वारा संख्याओं का प्रतिनिधित्व करते हैं जैसे कि π·sin(2), और इस प्रकार अनंत सटीकता के साथ किसी भी गणना योग्य संख्या का प्रतिनिधित्व कर सकता है।

अनुप्रयोग

एक सामान्य अनुप्रयोग सार्वजनिक कुंजी क्रिप्टोग्राफी है, जिसके एल्गोरिदम आमतौर पर सैकड़ों अंकों वाले पूर्णांक वाले अंकगणित का उपयोग करते हैं।[5][6] और स्थिति में है जहां कृत्रिम सीमाएं और अंकगणितीय अतिप्रवाह अनुचित होगा। यह निश्चित-सटीक गणनाओं के परिणामों की जाँच के लिए भी उपयोगी है, और सूत्रों में आवश्यक गुणांकों के लिए इष्टतम या निकट-इष्टतम मान निर्धारित करने के लिए, उदाहरण के लिए जो गॉसियन एकीकरण में प्रकट होता है।[7] मनमाने ढंग से सटीक अंकगणित का उपयोग मौलिक गणितीय स्थिरांक जैसे pi|π को लाखों या अधिक अंकों तक करने और अंकों के तार के गुणों का विश्लेषण करने के लिए भी किया जाता है।[8] या अधिक आम तौर पर रीमैन जीटा फ़ंक्शन जैसे कार्यों के सटीक व्यवहार की जांच करने के लिए जहां विश्लेषणात्मक तरीकों के माध्यम से कुछ प्रश्नों का पता लगाना मुश्किल होता है। अन्य उदाहरण भग्न छवियों को अत्यधिक उच्च आवर्धन के साथ प्रस्तुत करना है, जैसे कि मैंडेलब्रॉट सेट में पाए जाते हैं।

अंकगणितीय अतिप्रवाह से बचने के लिए मनमाना-परिशुद्धता अंकगणित का भी उपयोग किया जा सकता है, जो निश्चित-परिशुद्धता अंकगणित की अंतर्निहित सीमा है। 5-अंकीय ओडोमीटर के प्रदर्शन के समान, जो 99999 से 00000 में बदलता है, निश्चित-परिशुद्धता पूर्णांक पूर्णांक अतिप्रवाह प्रदर्शित कर सकता है यदि संख्या सटीकता के निश्चित स्तर पर प्रतिनिधित्व करने के लिए बहुत बड़ी हो जाती है। इसके बजाय कुछ प्रोसेसर संतृप्ति अंकगणित द्वारा अतिप्रवाह से निपट सकते हैं, जिसका अर्थ है कि यदि परिणाम अप्राप्य होगा, तो इसे निकटतम प्रतिनिधित्व योग्य मान से बदल दिया जाता है। (16-बिट अहस्ताक्षरित संतृप्ति के साथ, 65535 में कोई सकारात्मक राशि जोड़ने से 65535 निकलेगा।) कुछ प्रोसेसर अपवाद हैंडलिंग उत्पन्न कर सकते हैं यदि अंकगणितीय परिणाम उपलब्ध परिशुद्धता से अधिक है। जहां आवश्यक हो, अपवाद को पकड़ा जा सकता है और इससे पुनर्प्राप्त किया जा सकता है - उदाहरण के लिए, मनमाने ढंग से सटीक अंकगणित का उपयोग करके सॉफ़्टवेयर में ऑपरेशन को पुनरारंभ किया जा सकता है।

कई मामलों में, कार्य या प्रोग्रामर इस बात की गारंटी दे सकता है कि किसी विशिष्ट एप्लिकेशन में पूर्णांक मान अतिप्रवाह पैदा करने के लिए पर्याप्त रूप से बड़े नहीं होंगे। इस तरह की गारंटी व्यावहारिक सीमाओं पर आधारित हो सकती है: स्कूल उपस्थिति कार्यक्रम में 4,000 छात्रों की कार्य सीमा हो सकती है। प्रोग्रामर अभिकलन को डिज़ाइन कर सकता है ताकि मध्यवर्ती परिणाम निर्दिष्ट सटीक सीमाओं के भीतर रहें।

कुछ प्रोग्रामिंग लैंग्वेज जैसे कि लिस्प (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग लैंग्वेज), पर्ल, हास्केल (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा) और राकू (प्रोग्रामिंग भाषा) का उपयोग करें, या उपयोग करने का विकल्प है, मनमाने ढंग से सटीक संख्याएँ सभी पूर्णांक अंकगणित। हालांकि यह प्रदर्शन को कम करता है, यह सरल अतिप्रवाह के कारण गलत परिणाम (या अपवाद) की संभावना को समाप्त करता है। यह गारंटी देना भी संभव बनाता है कि किसी विशेष मशीन के वर्ड (डेटा प्रकार) की परवाह किए बिना अंकगणितीय परिणाम सभी मशीनों पर समान होंगे। प्रोग्रामिंग भाषा में मनमाना-परिशुद्धता संख्याओं का अनन्य उपयोग भी भाषा को सरल करता है, क्योंकि संख्या संख्या है और सटीकता के विभिन्न स्तरों का प्रतिनिधित्व करने के लिए कई प्रकारों की आवश्यकता नहीं होती है।

कार्यान्वयन के मुद्दे

प्रोसेसर रजिस्टरों के भीतर पूरी तरह से फिट होने वाली संख्याओं का उपयोग करते हुए मनमाना-सटीक अंकगणित अंकगणित की तुलना में काफी धीमा है, क्योंकि बाद वाले आमतौर पर अंकगणितीय तर्क इकाई में लागू होते हैं जबकि पूर्व को सॉफ्टवेयर में लागू किया जाना चाहिए। यहां तक ​​​​कि अगर संगणक में कुछ संचालन (जैसे पूर्णांक विभाजन, या सभी फ़्लोटिंग-पॉइंट ऑपरेशंस) के लिए हार्डवेयर की कमी है और इसके बजाय सॉफ़्टवेयर प्रदान किया गया है, तो यह उपलब्ध हार्डवेयर रजिस्टरों से संबंधित संख्या आकारों का उपयोग करेगा: केवल या दो शब्द और निश्चित रूप से एन नहीं शब्द। अपवाद हैं, क्योंकि 1950 और 1960 के दशक की कुछ चर शब्द लंबाई वाली मशीन मशीनें, विशेष रूप से IBM 1620, IBM 1401 और हनीवेल लिबरेटर श्रृंखला, केवल उपलब्ध भंडारण से बंधी संख्याओं में हेरफेर कर सकती हैं, अतिरिक्त बिट के साथ जो मूल्य को सीमांकित करती है।

संख्याओं को निश्चित-बिंदु अंकगणित में संग्रहीत किया जा सकता है। निश्चित-बिंदु प्रारूप, या फ़्लोटिंग-पॉइंट प्रारूप में महत्व के रूप में और मनमाने ढंग से घातांक द्वारा गुणा किया जा सकता है। हालाँकि, चूंकि विभाजन लगभग तुरंत अंकों के असीम रूप से दोहराए जाने वाले अनुक्रमों (जैसे दशमलव में 4/7, या बाइनरी में 1/10) का परिचय देता है, क्या यह संभावना उत्पन्न होती है या तो प्रतिनिधित्व को कुछ संतोषजनक आकार में छोटा कर दिया जाएगा या फिर परिमेय संख्या होगी प्रयुक्त: अंश और हर के लिए बड़ा पूर्णांक। लेकिन सबसे बड़े सामान्य भाजक के विभाजित होने पर भी, परिमेय संख्याओं के साथ अंकगणित बहुत जल्दी बोझिल हो सकता है: 1/99 − 1/100 = 1/9900, और यदि 1/101 जोड़ा जाता है, तो परिणाम 10001/999900 होता है।

मनमाना-सटीक संख्याओं का आकार अभ्यास में उपलब्ध कुल भंडारण और गणना समय द्वारा सीमित है।

मनमाना परिशुद्धता के साथ संग्रहीत संख्याओं पर कुशलतापूर्वक अंकगणितीय संचालन करने के लिए कई एल्गोरिदम विकसित किए गए हैं। विशेष रूप से, मान लीजिए N अंक नियोजित हैं, एल्गोरिदम को बड़े पैमाने पर एसिम्प्टोटिक कम्प्यूटेशनल जटिलता सिद्धांत को कम करने के लिए डिज़ाइन किया गया है N.

सबसे सरल एल्गोरिद्म जोड़ और घटाव के लिए हैं, जहां कोई अंकों को अनुक्रम में जोड़ता या घटाता है, आवश्यकतानुसार ले जाता है, जिससे अंक प्राप्त होता है। O(N) एल्गोरिदम (बिग ओ नोटेशन देखें)।

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

गुणन के लिए, संख्याओं को हाथ से गुणा करने के लिए उपयोग किए जाने वाले सबसे सरल एल्गोरिदम (जैसा कि प्राथमिक विद्यालय में पढ़ाया जाता है) की आवश्यकता होती है (N2) संचालन, लेकिन गुणन एल्गोरिदम जो प्राप्त करते हैं O(N log(N) log(log(N))) जटिलता को तैयार किया गया है, जैसे शॉनहेज-स्ट्रैसन एल्गोरिदम, जो तेजी से फूरियर रूपांतरण पर आधारित है, और थोड़ी खराब जटिलता वाले एल्गोरिदम भी हैं, लेकिन कभी-कभी छोटे के लिए बेहतर वास्तविक दुनिया के प्रदर्शन के साथ N. करत्सुबा एल्गोरिथम गुणन ऐसा एल्गोरिथम है।

डिवीजन (गणित) के लिए, विभाजन एल्गोरिथ्म देखें।

जटिलता अनुमानों के साथ एल्गोरिदम की सूची के लिए, गणितीय कार्यों की कम्प्यूटेशनल जटिलता देखें।

उदाहरण के लिए x86 असेंबली में, #बाहरी लिंक देखें।

प्री-सेट सटीक

कुछ भाषाओं जैसे REXX में, गणना करने से पहले सभी गणनाओं की सटीकता निर्धारित की जानी चाहिए। अन्य भाषाएँ, जैसे कि पायथन (प्रोग्रामिंग भाषा) और रूबी (प्रोग्रामिंग भाषा), अतिप्रवाह को रोकने के लिए स्वचालित रूप से सटीकता का विस्तार करती हैं।

उदाहरण

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

लेकिन अगर बड़े फैक्टोरियल के लिए सटीक मान वांछित हैं, तो विशेष सॉफ्टवेयर की आवश्यकता होती है, जैसा कि छद्म कोड में होता है, जो 1, 1×2, 1×2×3, 1×2×3×4 की गणना करने के लिए क्लासिक एल्गोरिदम को लागू करता है। आदि क्रमिक भाज्य संख्याएँ।

स्थिर सीमा = 1000; % पर्याप्त अंक।
स्थिर आधार = 10;;% सिम्युलेटेड अंकगणित का आधार।
लगातार फैक्टोरियल लिमिट = 365; हल करने के लिए�% लक्ष्य संख्या, 365!
ऐरे अंक [1: सीमा] पूर्णांक का;�% बड़ी संख्या।
पूर्णांक कैरी, डी; गुणन के दौरान�% सहायक।
पूर्णांक अंतिम, i; बड़ी संख्या के अंकों के लिए�% सूचकांक।
सरणी पाठ [1: सीमा] चरित्र का; आउटपुट के लिए�% स्क्रैचपैड।
लगातार tdigit [0:9] वर्ण का = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ];
'शुरू'
 अंक:=0;�% संपूर्ण सरणी साफ़ करें।
 अंक [1]: = 1; % बड़ी संख्या 1 से शुरू होती है,
 अंतिम:=1;�% इसका उच्चतम क्रम अंक संख्या 1 है।
 'फॉर' एन:=1 'टू' फैक्टोरियललिमिट 'डू'�% स्टेप थ्रू प्रोडक्शन 1!, 2!, 3!, 4!, आदि।
 कैरी: = 0;�% n से गुणा प्रारंभ करें।
 'for' i:=1 'to' last 'do% स्टेप हर डिजिट के साथ।
 डी: = अंक [i] * एन + कैरी;+% क्लासिक गुणा।
 अंक [i]: = डी 'मॉड' बेस;�% परिणाम का निम्न-क्रम अंक।
 कैरी: = डी 'डिव' बेस;�% अगले अंक तक ले जाना।
 'अगला मैं;
 'जबकि' कैरी> 0% कैरी को बड़ी संख्या में स्टोर करें।
 'अगर' अंतिम> = सीमा 'फिर' क्रोक (अतिप्रवाह!);�% अगर संभव हो तो!
 अंतिम: = अंतिम + 1; % और अंक।
 अंक [आखिरी]: = 'मॉड' बेस कैरी करें;�% रखा हे।
 कैरी: = कैरी 'डिव' बेस; % कैरी कम हो गया।
 'Wend'�% n > बेस के साथ, हो सकता है > 1 अंक अतिरिक्त।
 पाठ: =;�% अब आउटपुट तैयार करें।
 'for' i:=1 'to' last 'do'% बाइनरी से टेक्स्ट में ट्रांसलेट करें।
 पाठ [सीमा - i + 1]: = tdigit [अंक [i;]]% क्रम उलट रहा है।
 'अगला मैं;
% अरबी अंक निम्न क्रम को अंत में रखते हैं।
 'प्रिंट' टेक्स्ट, = ,n, !�;�% परिणाम प्रिंट करें!
 'अगला' एन; अगले फैक्टोरियल तक�% चालू।
'अंत';

उदाहरण को ध्यान में रखते हुए, कई विवरणों पर चर्चा की जा सकती है। सबसे महत्वपूर्ण बड़ी संख्या के प्रतिनिधित्व का चुनाव है। इस मामले में, अंकों के लिए केवल पूर्णांक मानों की आवश्यकता होती है, इसलिए निश्चित-चौड़ाई वाले पूर्णांकों की सरणी पर्याप्त होती है। सरणी के लगातार तत्वों को आधार की उच्च शक्तियों का प्रतिनिधित्व करना सुविधाजनक है।

दूसरा सबसे महत्वपूर्ण निर्णय अंकगणित के आधार के चुनाव में है, यहाँ दस। कई विचार हैं। स्क्रैचपैड चर d एक-अंक के गुणा के परिणाम को धारण करने में सक्षम होना चाहिए और पिछले अंक के गुणन से वहन करना चाहिए। आधार दस में, सोलह-बिट पूर्णांक निश्चित रूप से पर्याप्त है क्योंकि यह 32767 तक की अनुमति देता है। हालाँकि, यह उदाहरण धोखा देता है, जिसमें का मान n स्वयं अंक तक सीमित नहीं है। इसका परिणाम यह होता है कि यह विधि विफल हो जाएगी n > 3200 या ऐसा। अधिक सामान्य कार्यान्वयन में, n बहु-अंकीय प्रतिनिधित्व का भी उपयोग करेगा। शॉर्टकट का दूसरा परिणाम यह है कि मल्टी-डिजिट गुणा पूरा होने के बाद, कैरी के अंतिम मूल्य को केवल ही नहीं, बल्कि कई उच्च-क्रम अंकों में ले जाने की आवश्यकता हो सकती है।

मानव विचार के लिए परिणाम को आधार दस में प्रिंट करने का मुद्दा भी है। क्योंकि आधार पहले से ही दस है, परिणाम केवल सरणी अंकों के क्रमिक अंकों को प्रिंट करके दिखाया जा सकता है, लेकिन वे उच्चतम-क्रम अंक के साथ अंतिम रूप से दिखाई देंगे (ताकि 123 321 के रूप में दिखाई दे)। पूरे सरणी को उल्टे क्रम में मुद्रित किया जा सकता है, लेकिन वह संख्या को अग्रणी शून्य ( 00000...000123 ) के साथ प्रस्तुत करेगा, जिसकी सराहना नहीं की जा सकती है, इसलिए यह कार्यान्वयन अंतरिक्ष-गद्देदार पाठ चर में प्रतिनिधित्व बनाता है और फिर उसे प्रिंट करता है। पहले कुछ परिणाम (प्रत्येक पाँचवें अंक में रिक्ति और यहाँ जोड़े गए एनोटेशन के साथ) हैं:

Factorial numbers Reach of computer integers
1 = 1!
2 = 2!
6 = 3!
24 = 4!
120 = 5! 8-bit 255
720 = 6!
5040 = 7!
40320 = 8! 16-bit 65535
3 62880 = 9!
36 28800 = 10!
399 16800 = 11!
4790 01600 = 12! 32-bit 42949 67295
62270 20800 = 13!
8 71782 91200 = 14!
130 76743 68000 = 15!
2092 27898 88000 = 16!
35568 74280 96000 = 17!
6 40237 37057 28000 = 18!
121 64510 04088 32000 = 19!
2432 90200 81766 40000 = 20! 64-bit 18446 74407 37095 51615
51090 94217 17094 40000 = 21!
11 24000 72777 76076 80000 = 22!
258 52016 73888 49766 40000 = 23!
6204 48401 73323 94393 60000 = 24!
1 55112 10043 33098 59840 00000 = 25!
40 32914 61126 60563 55840 00000 = 26!
1088 88694 50418 35216 07680 00000 = 27!
30488 83446 11713 86050 15040 00000 = 28!
8 84176 19937 39701 95454 36160 00000 = 29!
265 25285 98121 91058 63630 84800 00000 = 30!
8222 83865 41779 22817 72556 28800 00000 = 31!
2 63130 83693 36935 30167 21801 21600 00000 = 32!
86 83317 61881 18864 95518 19440 12800 00000 = 33!
2952 32799 03960 41408 47618 60964 35200 00000 = 34! 128-bit 3402 82366 92093 84634 63374 60743 17682 11455
1 03331 47966 38614 49296 66651 33752 32000 00000 = 35!

यह कार्यान्वयन कंप्यूटर के अंतर्निहित अंकगणित का अधिक प्रभावी उपयोग कर सकता है। आधार 100 (आउटपुट के लिए अनुवाद प्रक्रिया में संबंधित परिवर्तनों के साथ) का उपयोग करने के लिए साधारण वृद्धि होगी, या, पर्याप्त रूप से विस्तृत कंप्यूटर चर (जैसे 32-बिट पूर्णांक) के साथ हम 10,000 जैसे बड़े आधारों का उपयोग कर सकते हैं। कंप्यूटर के बिल्ट-इन पूर्णांक संचालन के करीब पावर-ऑफ-2 बेस में काम करने से लाभ मिलता है, हालांकि आउटपुट के लिए दशमलव आधार में रूपांतरण अधिक कठिन हो जाता है। विशिष्ट आधुनिक कंप्यूटरों पर, परिवर्धन और गुणन, संकार्यों के मूल्यों से स्वतंत्र निरंतर समय लेते हैं (जब तक कि संकार्य एकल मशीन शब्दों में फिट होते हैं), इसलिए प्रत्येक तत्व में जितना संभव हो उतना बड़ी संख्या में पैकिंग में बड़े लाभ होते हैं। अंकों की सरणी। कंप्यूटर किसी उत्पाद को अंक में विभाजित करने और उदाहरण के रूप में मॉड और डिव के दो संचालन की आवश्यकता के बिना ले जाने की सुविधा भी प्रदान कर सकता है, और लगभग सभी अंकगणितीय इकाइयाँ झंडा ले जाना प्रदान करती हैं जिसका उपयोग बहु-सटीक जोड़ और घटाव में किया जा सकता है। इस प्रकार का विवरण मशीन-कोड प्रोग्रामर का ग्रिस्ट है, और उपयुक्त असेंबली-लैंग्वेज बिगनंबर रूटीन उच्च-स्तरीय भाषा के संकलन के परिणाम की तुलना में बहुत तेजी से चल सकता है, जो ऐसी सुविधाओं तक पहुंच प्रदान नहीं करता है।

एकल-अंकों के गुणा के लिए कार्यशील चर को मान (आधार-1) रखने में सक्षम होना चाहिए2 + कैरी, जहां कैरी का अधिकतम मूल्य (आधार-1) है। इसी तरह, अंकों की सरणी को अनुक्रमित करने के लिए उपयोग किए जाने वाले चर स्वयं चौड़ाई में सीमित होते हैं। सूचकांकों का विस्तार करने का आसान तरीका कुछ सुविधाजनक आकार के ब्लॉक में बड़ी संख्या के अंकों से निपटना होगा ताकि एड्रेसिंग (ब्लॉक i, अंक j) के माध्यम से हो, जहां i और j छोटे पूर्णांक होंगे, या कोई आगे बढ़ सकता है इंडेक्सिंग वेरिएबल्स के लिए बिगनंबर तकनीकों को नियोजित करना। अंततः, मशीन भंडारण क्षमता और निष्पादन समय समस्या के आकार पर सीमाएँ लगाते हैं।

इतिहास

1950 के दशक के मध्य में IBM का पहला व्यावसायिक कंप्यूटर, IBM 702 (एक वेक्यूम - ट्यूब मशीन), पूर्णांक अंकगणित को 1 से 511 अंकों की किसी भी लंबाई के अंकों के तार पर पूरी तरह से हार्डवेयर में लागू किया। मनमाना-सटीक अंकगणित का सबसे पहला व्यापक सॉफ्टवेयर कार्यान्वयन संभवतः Maclisp में था। बाद में, 1980 के आसपास, ऑपरेटिंग सिस्टम VAX/VMS और VM/CMS ने मामले में शाब्दिक स्ट्रिंग Subprogram के संग्रह के रूप में और दूसरे में EXEC 2 और REXX भाषाओं में बिग्नम सुविधाओं की पेशकश की।

1959-1970 के आईबीएम 1620 के माध्यम से प्रारंभिक व्यापक कार्यान्वयन उपलब्ध था। 1620 दशमलव-अंकीय मशीन थी जो असतत ट्रांजिस्टर का उपयोग करती थी, फिर भी इसमें लंबाई के अंकों के तार पर पूर्णांक अंकगणित करने के लिए हार्डवेयर (जो तालिका देखो का उपयोग किया गया था) था जो दो से लेकर जो भी मेमोरी उपलब्ध थी। फ़्लोटिंग-पॉइंट अंकगणित के लिए, मंटिसा सौ अंकों या उससे कम तक सीमित था, और एक्सपोनेंट केवल दो अंकों तक ही सीमित था। आपूर्ति की गई सबसे बड़ी मेमोरी 60 000 अंकों की पेशकश करती है, हालांकि 1620 के लिए फोरट्रान कंपाइलर निश्चित आकार जैसे 10 पर बसे, हालांकि इसे नियंत्रण कार्ड पर निर्दिष्ट किया जा सकता है यदि डिफ़ॉल्ट संतोषजनक नहीं था।

सॉफ्टवेयर लाइब्रेरी

अधिकांश कंप्यूटर सॉफ़्टवेयर में मनमाना-परिशुद्धता अंकगणित बाहरी पुस्तकालय (कंप्यूटर विज्ञान) को कॉल करके कार्यान्वित किया जाता है जो अनुरोधित सटीकता के साथ संख्याओं को संग्रहीत करने और संगणना करने के लिए डेटा प्रकार और सबरूटीन प्रदान करता है।

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

यह भी देखें

संदर्भ

  1. dotnet-bot. "BigInteger Struct (System.Numerics)". docs.microsoft.com (in English). Retrieved 2022-02-22.
  2. "PEP 237 -- Unifying Long Integers and Integers". Python.org (in English). Retrieved 2022-05-23.
  3. "BigInteger (Java Platform SE 7 )". docs.oracle.com. Retrieved 2022-02-22.
  4. "BigInt - JavaScript | MDN". developer.mozilla.org (in English). Retrieved 2022-02-22.
  5. Jacqui Cheng (May 23, 2007). "Researchers: 307-digit key crack endangers 1024-bit RSA".
  6. "RSA Laboratories - 3.1.5 How large a key should be used in the RSA cryptosystem?". Archived from the original on 2012-04-01. Retrieved 2012-03-31. recommends important RSA keys be 2048 bits (roughly 600 digits).
  7. Laurent Fousse (2006). Intégration numérique avec erreur bornée en précision arbitraire. Modélisation et simulation (Report) (in français). Université Henri Poincaré - Nancy I.
  8. R. K. Pathria (1962). "A Statistical Study of the Randomness Among the First 10,000 Digits of Pi". Mathematics of Computation. 16 (78): 188–197. doi:10.1090/s0025-5718-1962-0144443-7. Retrieved 2014-01-10. A quote example from this article: "Such an extreme pattern is dangerous even if diluted by one of its neighbouring blocks"; this was the occurrence of the sequence 77 twenty-eight times in one block of a thousand digits.


आगे की पढाई


बाहरी कड़ियाँ