programming languages - क्या प्रोग्रामिंग भाषाओं मनमाने ढंग से सटीक अंकगणितीय का समर्थन करते हैं?




programming-languages bigdecimal (10)

क्या प्रोग्रामिंग भाषा मनमाने ढंग से सटीक अंकगणितीय का समर्थन करती हैं और क्या आप अंकों की मनमाना संख्या को मुद्रित करने का एक छोटा उदाहरण दे सकते हैं?


कई लोगों ने पायथन के दशमलव मॉड्यूल की सिफारिश की है, लेकिन मैं किसी भी गंभीर संख्यात्मक उपयोगों के लिए दशमलव पर mpmath का उपयोग करने की सिफारिश करेगा।


कुछ भाषाओं में इस समर्थन का निर्माण होता है। उदाहरण के लिए, जावा में जावा.माथ.बिगैटकेल पर नज़र डालें, या दशमलव । पायथन में दशमलव

इस सुविधा को प्रदान करने के लिए अन्य भाषाओं में अक्सर एक पुस्तकालय उपलब्ध है। उदाहरण के लिए, सी में आप जीएमपी या अन्य विकल्पों का उपयोग कर सकते हैं।

इस आलेख के "मनमाना-सटीक सॉफ़्टवेयर" खंड आपके विकल्पों का एक अच्छा ठहरने देता है।


जावा मूलतः BigDecimal के साथ बिग्नम संचालन कर सकता है जीएमपी सी / सी ++ के साथ बिग्नम के लिए परिभाषित मानक पुस्तकालय है


यदि आप .NET दुनिया में काम करना चाहते हैं तो आप अभी भी java.math.BigDecimal क्लास का उपयोग कर सकते हैं। बस vjslib (ढांचे में) के लिए एक संदर्भ जोड़ें और फिर आप जावा वर्गों का उपयोग कर सकते हैं।

महान बात यह है कि, वे किसी भी .net भाषा का इस्तेमाल कर सकते हैं। उदाहरण के लिए सी #:

    using java.math;

    namespace MyNamespace
    {
        class Program
        {
            static void Main(string[] args)
            {
                BigDecimal bd = new BigDecimal("12345678901234567890.1234567890123456789");

                Console.WriteLine(bd.ToString());
            }
        }
    }

कोबोल

77 VALUE PIC S9(4)V9(4). 

एक हस्ताक्षरित चर डाली 4 दशमलव।

पी एल / 1

DCL VALUE DEC FIXED (4,4);

:-) मुझे अन्य पुरानी चीजों को याद नहीं है ...

चुटकुले अलग, मेरे उदाहरण दिखाने के रूप में, मुझे लगता है कि आपको एक सुविधा के आधार पर एक प्रोग्रामिंग भाषा नहीं चुननी चाहिए। वस्तुतः सभी सभ्य और हालिया भाषा में कुछ समर्पित कक्षाओं में निश्चित परिशुद्धता का समर्थन किया गया है।


मेथेमेटिका।

N[Pi, 100]

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068

न केवल गणितिका में मनमाने ढंग से परिशुद्धता होती है, लेकिन डिफ़ॉल्ट रूप से इसकी असीम परिशुद्धता होती है। यह 1/3 की तरह राशन के रूप में चीजें रखती है और यहां तक ​​कि Sqrt जैसी चीजें भी शामिल होती हैं [2] जब तक आप एक संख्यात्मक सन्निकटन की मांग नहीं करते, तब तक प्रतीकात्मकता बनाए रखता है, जो आपको किसी भी संख्या में दशमलव स्थानों के लिए हो सकता है।


स्मॉलटाक शुरुआती से मनमानी परिशुद्धता पूर्णांक और अंश का समर्थन करता है। ध्यान दें कि ग्नू स्मालटाक कार्यान्वयन हुड के तहत जीएमपी का उपयोग करता है। मैं विभिन्न बोलियों (सिकैक / फारो विज़ुअलवर्क्स और डॉल्फिन) के लिए अर्बिट्रीफ्यूशनफ्लॉट भी विकसित कर रहा हूं, देखें http://www.squeaksource.com/ArbitraryPrecisionFl.html


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

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

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

मैथमैटिका की मान्यता के लिए मैं कहता हूं कि 2011 के रूप में मुझे लगता है कि मैथमैटिका इंटरेक्टिव विज़ुअलाइजेशन में सर्वश्रेष्ठ है, लेकिन मुझे लगता है कि प्रोग्रामिंग बिंदु से देखने के लिए अधिक सुविधाजनक विकल्प हैं, भले ही गणितिका एक ओपन सोर्स प्रोजेक्ट है। मेरे लिए ऐसा लगता है कि महमटेमेटिका थोड़ी धीमी और विशाल डेटा सेट के साथ काम करने के लिए उपयुक्त नहीं है। यह मुझे लगता है कि गणित का आला सैद्धांतिक गणित है, न कि वास्तविक जीवन संख्या क्रंचिंग। दूसरी ओर, मेथेमेटिका के प्रकाशक, वोल्फैम रिसर्च, एक उच्चतम गुणवत्ता में से एक की मेजबानी और रखरखाव कर रहा है, यदि नहीं तो सबसे उच्च गुणवत्ता, उपयोग करने के लिए स्वतंत्र, पृथ्वी पर गणित संदर्भ साइट: http: // mathworld। wolfram.com/ ऑनलाइन प्रलेखन प्रणाली जो गणितिका के साथ बंडल की जाती है, वह वास्तव में अच्छा है।

जब गति के बारे में बात करते हैं, तो यह उल्लेखनीय है कि रेडस को लिनक्स रूटर पर भी चलाया जाता है। खुद को लिस्प में लिखा गया है, लेकिन यह अपने दो विशेष, विशिष्ट, लिस्प कार्यान्वयन के साथ आता है। एक लिप्स का जावा में कार्यान्वित किया गया है और दूसरा सी में कार्यान्वित किया गया है। दोनों ही मज़बूत दृश्य के मद्देनजर ठीक से काम करते हैं। REDUCE में 2 मोड हैं: परंपरागत "गणित मोड" और "प्रोग्रामर मोड" जो उस भाषा द्वारा सभी आंतरिकों को पूर्ण पहुंच प्रदान करने की अनुमति देता है जो कि लाल रंग में स्वयं लिखा गया है: लिस्प।

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

http://www.reduce-algebra.com/

उदाहरण के लिए, जहां प्रथा में प्रतीकात्मक गणना आवश्यक है, मै मैट्रिक्स उलटाव से रेखीय समीकरणों की एक प्रणाली को सुलझाने का एक उदाहरण प्रस्तुत करता हूं। मैट्रिक्स को उलटा करने के लिए, एक को निर्धारक ढूंढने की आवश्यकता होती है। सीधी सीपीयू के साथ चलने वाला गोलाकार अस्थायी बिंदु प्रकारों को समर्थित करता है, मैट्रिक्स को एक मैट्रिक्स प्रदान कर सकता है जिसमें सैद्धांतिक रूप से एक व्युत्क्रम होता है, मैट्रिक्स के लिए जिसमें व्युत्क्रम नहीं होता है यह बदले में एक स्थिति का परिचय देता है, जहां अधिकांश समय सॉफ्टवेयर ठीक काम कर सकता है, लेकिन यदि डेटा थोड़ी "दुर्भाग्यपूर्ण" है तो एप्लिकेशन क्रैश हो जाता है, इस तथ्य के बावजूद कि एल्गोरिथम तौर पर सॉफ़्टवेयर में कुछ भी गलत नहीं है, गोलाई के अलावा चल बिन्दु संख्या

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


अजगर की ऐसी क्षमता है यहां एक उत्कृष्ट उदाहरण है

लेख से:

from math import log as _flog
from decimal import getcontext, Decimal

def log(x):
    if x < 0:
        return Decimal("NaN")
    if x == 0:
        return Decimal("-inf")
    getcontext().prec += 3
    eps = Decimal("10")**(-getcontext().prec+2)
    # A good initial estimate is needed
    r = Decimal(repr(_flog(float(x))))
    while 1:
        r2 = r - 1 + x/exp(r)
        if abs(r2-r) < eps:
            break
        else:
            r = r2
    getcontext().prec -= 3
    return +r

इसके अलावा, अजगर जल्दी शुरू ट्यूटोरियल मनमाना परिशुद्धता पर चर्चा करता है: http://docs.python.org/lib/decimal-tutorial.html

और getcontext का वर्णन करता है:

getcontext () फ़ंक्शन वर्तमान संदर्भ तक पहुंचता है और सेटिंग्स को परिवर्तित करने की अनुमति देता है।

संपादित करें: getcontext पर स्पष्टीकरण जोड़ा गया।


कई जावास्क्रिप्ट पुस्तकालय हैं जो मनमाना-सटीक अंकगणित को संभालते हैं।
उदाहरण के लिए, मेरी big.js लाइब्रेरी का उपयोग कर:

Big.DP = 20;                      // Decimal Places
var pi = Big(355).div(113)    

console.log( pi.toString() );    // '3.14159292035398230088'