GNU ऑक्टेव में एक्सप्रेशन (i * pi) गलत परिणाम क्यों देता है?


8

मैंने आज जीएनयू ऑक्टेव सीखना शुरू किया, और मैनुअल में दिए गए पहले अभिव्यक्ति की कोशिश की

exp(i*pi)

परिणाम है

ans = -1.0000e+000 + 1.2246e-016i

और ऐसा लगता है कि GNU साइंटिफिक लाइब्रेरी भी ऐसे ही परिणाम देती है।

तो क्या यह एक ऑक्टेव बग है, या संख्यात्मक विश्लेषण सॉफ़्टवेयर की सामान्य समस्याएं (प्रतीकात्मक मूल्यांकन सॉफ़्टवेयर निश्चित रूप से सटीक एक का जवाब देगा)?


2
संख्यात्मक विश्लेषण के लिए लगता है कि ओक्टेव प्राणिक है। गणितज्ञ निश्चित रूप से आपको बेहतर उत्तर देगा ...: पी बस मजाक कर रहा
हूं

@ गियाकोमो: मुझे यह पता है। मुझे आश्चर्य है कि अगर सभी संख्यात्मक विश्लेषणात्मक सॉफ्टवेयर इस तरह की संख्या, या सिर्फ GNU ऑक्टेव का मूल्यांकन करता है।
सियुआन रेन

@ कर्कस रेन यह वास्तव में एक सॉफ्टवेयर बग नहीं है, बल्कि एक हार्डवेयर है। यह हार्डवेयर पर अपरिमेय संख्याओं के साथ भावों का मूल्यांकन करने की एक अंतर्निहित सीमा है, जिसमें एक ही संख्या में सीमित मात्रा में भंडारण होता है।
ब्रेकथ्रू

जवाबों:


8

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

यदि आप इसे देखते हैं, तो e ^ (i * pi) -1 + 1.2x10 ^ -16i देता है। जैसा कि आप देख सकते हैं, काल्पनिक घटक बहुत छोटा है (अधिकांश इसे नगण्य मानते हैं, क्योंकि यह परिमाण के 16 आदेश छोटे हैं, फिर वास्तविक भाग)। इस घटक को राउंडिंग और सटीक त्रुटियों द्वारा प्रस्तुत किया गया है, दोनों ही गणना के साथ, साथ ही पाई का संग्रहीत मूल्य भी है क्योंकि यह तर्कहीन है ( अपरिमेय संख्याओं से निपटने के लिए एक और उदाहरण के लिए इस लिंक को देखें )।

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


1
मुझे बस एक पुष्टिकरण की आवश्यकता है कि यह संख्यात्मक विश्लेषण सॉफ़्टवेयर का सामान्य व्यवहार है।
सियुआन रेन

@ Karsus Ren यह वास्तव में उच्च पर्याप्त सटीकता के साथ इस तरह के सॉफ्टवेयर का व्यवहार है । मुझे पता है कि काउंटर-सहज ज्ञान युक्त लगता है, लेकिन कम सटीक संख्या अक्सर इन विसंगतियों को वापस नहीं करती है। देखें Microsoft से इस लेख अधिक जानकारी के लिए, लेकिन याद रखें, इस मुद्दे को दोनों स्रोत कोड और संकलक / लक्ष्य वास्तुकला का एक संयोजन है। इसके अलावा, विकिपीडिया के इस लेख में समस्या पर कुछ अच्छी पृष्ठभूमि की जानकारी है।
ब्रेकथ्रू

1
अंतर्निहित समस्या यह है कि ऑक्टेव की स्थिरांक piगणितीय स्थिरांक नहीं है π, बल्कि इसके पास एक अस्थायी फ्लोटिंग-पॉइंट सन्निकटन है। expसमारोह है कि करने के लिए एक और छोटा सा त्रुटि कहते हैं। एक प्रणाली जो प्रतीकात्मक अभिव्यक्तियों के साथ काम करती है वह exp(i*pi)वास्तव में गणना कर सकती है; ऑक्टेव ऐसी प्रणाली नहीं है।
कीथ थॉम्पसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.