वास्तविक की गणना: अस्थायी बिंदु बनाम टीटीई बनाम डोमेन सिद्धांत बनाम आदि


19

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

उदाहरण के लिए, क्या ऐसे अनुप्रयोगों के डोमेन हैं जहाँ हम फ़्लोटिंग पॉइंट त्रुटियों के बारे में अधिक परवाह नहीं करते हैं? क्या महत्वपूर्ण जटिलताएं हैं?

जवाबों:


17

मैं वास्तविक संख्या की गणना में काम करता हूं, और मेरी इच्छा है कि मैं वास्तविक उत्तर जानता हूं। लेकिन अटकलें लगा सकता हूं। यह एक समाजशास्त्रीय समस्या है, मुझे लगता है।

सटीक वास्तविक अंकगणित पर काम करने वाले लोगों के समुदाय में ऐसे सिद्धांतकार होते हैं जो सॉफ्टवेयर विकसित करने के अभ्यस्त नहीं होते हैं। इसलिए वे आमतौर पर छात्रों को लागू करने के कार्य को फिर से करते हैं (एक उल्लेखनीय अपवाद नॉर्बर्ट मुलर का iRRAM है ), या उनके पास अपने स्वयं के खिलौना कार्यान्वयन हैं

जो लोग ऐसा आवश्यक प्रोग्रामिंग मोजो आवश्यक सैद्धांतिक पृष्ठभूमि नहीं है। ठोस सैद्धांतिक पाद के बिना सही वास्तविक अंकगणित को सही ढंग से डिजाइन करना मुश्किल है। उदाहरण के लिए, forलूप में बहुत सारी वास्तविक संख्याओं को जोड़ना एक गलती है , क्योंकि सटीकता के नुकसान के कारण आपको अस्वीकार्य प्रदर्शन मिलेगा। यदि आप बहुत सारी और बहुत सी वास्तविकताओं को जोड़ना चाहते हैं, तो आपको इसे पेड़ जैसी संरचना के साथ करना चाहिए, आंशिक रकमों के परिमाण को ध्यान में रखते हुए। एक और चीज जो पार कर पाना मुश्किल है, वह यह है कि <और =बल्स पर कुल बलेन फंक्शन बस मौजूद नहीं होता है (आप कर सकते हैं =लेकिन यह या तो रिटर्न करता है falseया यह डायवर्ज करता है, और <दो समान वास्तविक दिए जाने पर डायवर्ज करता है)।

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


मैं सटीक वास्तविक अंकगणित पर लगभग पूरी तरह से निपुण हूं, लेकिन क्या कोई इसमें काहन योग को लागू नहीं कर सकता है?
jgg

1
हम्म, मुझे ऐसा नहीं लगता। अंतराल अंकगणित के रूप में सटीक वास्तविक अंकगणित के बारे में सोचें जो वांछित आउटपुट परिशुद्धता प्राप्त करने के लिए मध्यवर्ती परिशुद्धता को समायोजित करता है।
बाउर

3
इस तथ्य पर प्रोग्रामरों द्वारा समझ की कमी के अलावा कि वास्तविक संख्या अनंत वस्तुएं हैं और इसके परिणाम क्या प्रोग्रामेटिक रूप से किए जा सकते हैं, मुझे लगता है कि हार्डवेयर समर्थन की कमी भी महत्वपूर्ण है। केवल सही होने के लिए महत्वपूर्ण समय और मेमोरी ओवरहेड के साथ कुछ का उपयोग करने के लिए लोगों को समझाना कठिन है।
केवड़े

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

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

10

सामान्य तौर पर, लोग हमेशा फ्लोटिंग पॉइंट एरर की परवाह करते हैं। हालाँकि, मैं लेडी से असहमत हूं, और मुझे नहीं लगता कि समाजशास्त्रीय कारणों से फ़्लोट्स को मनमाने ढंग से सटीक यथार्थ (अधिकांश भाग के लिए) के लिए पसंद किया जाता है।

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

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

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

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


1
क्या किसी प्रकार की सटीक वास्तविक गणना और फ्लोटिंग पॉइंट कम्प्यूटेशन के बीच कोई सिद्ध अंतराल है?
SorcererofDM

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

-6

मैं शायद ही एक विशेषज्ञ हूं, लेकिन मैं पिछले कुछ वर्षों में इस पर अपने चॉप का सम्मान कर रहा हूं। समस्या यह है कि "वास्तविक" संख्याएं बस उसी तरह से मौजूद नहीं हैं जिस तरह से नैट्रल नंबर करते हैं। क्या कोई है जो " -ness" का सहज ज्ञान युक्त समझ है ? मूल रूप से वास्तविक संख्या विभिन्न सीमा प्रक्रियाओं द्वारा परिभाषित की जाती है; इन सीमाओं में से कई प्रक्रियाओं को विशेष नाम दिया गया है, और उनमें से कुछ विशेष रूप से पर्याप्त हैं जो वास्तविक रूप से महत्वपूर्ण उपसमूह बनाती हैं (जैसे बीजीय संख्या)π

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

बेशक, बहुत कम काम करने वाले प्रोग्रामर इस तरह सोचते हैं। वे ज्यादातर खुद से कहते हैं "जी, डबल से अधिक सटीक है जितना मैं संभवतः कभी भी कर सकता हूं, साथ ही इसका उपयोग भी कर सकता है", और ज्यादातर यह सबसे किफायती दृष्टिकोण है। समस्या यह है कि अधिकांश प्रोग्रामर यह नहीं जानते कि जब वे मुसीबत में पड़ रहे हैं तो उन्हें कैसे पता चले क्योंकि डबल-सटीक फ़्लोट का सेट असीम रूप से से छोटा है ...R

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.