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

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

मैं आम तौर पर वैज्ञानिक कंप्यूटिंग के लिए मिल डीप लर्निंग यूज-केस चलाने के लिए अनिश्चित हूं (उदाहरण के लिए बहुत से लोग सुन्न या स्किकिट-लर्न का उपयोग करते हैं जो मुझे लगता है कि फ्लोटिंग पॉइंट कार्यान्वयन का उपयोग करते हैं), और वित्तीय कंप्यूटिंग (जैसे ट्रेडिंग रणनीतियों) के लिए मानदंड क्या हैं हैं।

क्या कोई इन तीन क्षेत्रों के लिए पाइथन में फ़्लोटिंग पॉइंट बनाम दशमलव उपयोग के मानदंडों को जानता है?

  1. वित्त (व्यापारिक रणनीतियाँ)
  2. ध्यान लगा के पढ़ना या सीखना
  3. वैज्ञानिक कंप्यूटिंग

धन्यवाद

N.B.: यह फ़्लोटिंग पॉइंट और फिक्स्ड-पॉइंट अभ्यावेदन के बीच अंतर के बारे में / नहीं / एक प्रश्न है, या फ़्लोटिंग पॉइंट अंकगणित आश्चर्यजनक परिणाम क्यों उत्पन्न करता है। यह एक प्रश्न है कि मानदंड क्या हैं।

1
phoenixdown 25 जून 2020, 04:28

1 उत्तर

सबसे बढ़िया उत्तर

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

सबसे पहले और सबसे महत्वपूर्ण, फ्लोट नंबर बुराई नहीं हैं; आपको केवल यह समझने की आवश्यकता है कि आपकी परियोजना को कितनी सटीकता की आवश्यकता है।

वित्त

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

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

मैंने सुना है कि निवेश बैंकों में, वे अपनी सभी प्रणालियों में double का उपयोग करते हैं क्योंकि वे बहुत बड़ी मात्रा में नकदी का लेनदेन करते हैं। इस प्रकार इन बैंकों में सटीकता की तुलना में सादगी और प्रदर्शन अधिक महत्वपूर्ण हैं।

ध्यान लगा के पढ़ना या सीखना

डीप लर्निंग उन क्षेत्रों में से एक है जिसमें उच्च परिशुद्धता की आवश्यकता नहीं होती है लेकिन उच्च प्रदर्शन की आवश्यकता होती है। एक तंत्रिका नेटवर्क में लाखों पैरामीटर हो सकते हैं, इसलिए एकल भार और पूर्वाग्रह की सटीकता नेटवर्क की भविष्यवाणी को प्रभावित नहीं करेगी। इसके बजाय, तंत्रिका नेटवर्क को किसी दिए गए डेटासेट पर प्रशिक्षित करने और उचित समय अंतराल में एक भविष्यवाणी देने के लिए बहुत तेजी से गणना करने की आवश्यकता होती है। इसके अलावा, कई त्वरक वास्तव में एक विशिष्ट प्रकार के फ्लोट को तेज कर सकते हैं: आधा-सटीक यानी fp16। इस प्रकार, मेमोरी में नेटवर्क के आकार को कम करने और ट्रेन और भविष्यवाणी प्रक्रिया में तेजी लाने के लिए, कई तंत्रिका नेटवर्क आमतौर पर हाइब्रिड मोड में चलते हैं। तंत्रिका नेटवर्क ढांचे और त्वरक चालक यह तय कर सकते हैं कि fp16 में न्यूनतम अतिप्रवाह और अंडरफ्लो जोखिम के साथ किन मापदंडों की गणना की जा सकती है क्योंकि fp16 की एक बहुत छोटी सीमा है: 10 ^ -8 से 65504। अन्य मापदंडों की गणना अभी भी fp32 में की जाती है। कुछ किनारे के उपयोग में, प्रयोग करने योग्य मेमोरी बहुत छोटी होती है (उदाहरण के लिए, K 210 और एज TPU में केवल 8MB ऑनबोर्ड SRAM है), इसलिए तंत्रिका नेटवर्क को इन उपकरणों में फिट होने के लिए 8-बिट फिक्स्ड-पॉइंट नंबरों का उपयोग करने की आवश्यकता होती है। फिक्स्ड-पॉइंट नंबर दशमलव की तरह होते हैं कि वे फ्लोटिंग-पॉइंट नंबरों के विपरीत होते हैं क्योंकि उनके पास दशमलव बिंदु के बाद निश्चित अंक होते हैं। आमतौर पर, वे सिस्टम में खुद को int8 या Unit8 के रूप में प्रस्तुत करते हैं।

वैज्ञानिक संगणना

double प्रकार (अर्थात 64-बिट फ्लोटिंग नंबर) आमतौर पर वैज्ञानिक गणना में वैज्ञानिक की आवश्यकता को पूरा करता है। इसके अलावा, IEEE 754 ने वैज्ञानिक गणना की सुविधा के लिए क्वाड प्रिसिजन (128 बिट) को भी परिभाषित किया है। इंटेल के x86 प्रोसेसर में 80-बिट विस्तारित सटीक प्रारूप भी है।

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

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

2
whilrun 16 मार्च 2021, 18:46