फ्लोटिंग-पॉइंट फ़ंक्शंस की सटीक परिशुद्धता


9

सामान्य वितरण सीडीएफ की गणना करने के लिए एक फ़ंक्शन के किसी अन्य प्रोग्रामर के कार्यान्वयन की समीक्षा करते समय , मैंने पायथन के अंतर्निहित कार्यों के साथ या तो पूरे कार्यान्वयन को बदलने का सुझाव दिया या एक सामान्य वैज्ञानिक पुस्तकालय SciPy का उपयोग किया।

एक अन्य प्रोग्रामर ने बताया कि न तो उनके दस्तावेज़ीकरण में कोई सटीक गारंटी है math.erfc()और न ही scipy.stats.norm.cdf()। इसलिए, मुझे एक अनुमान एल्गोरिथ्म को बदलने के बारे में अधिक सतर्क होना चाहिए (जो कि एक सम्मानित स्रोत से लिया गया था , और जिसमें त्रुटि सीमा दस्तावेज थी )।

ईमानदार होने के लिए, अंतर्निहित या लाइब्रेरी फ़ंक्शन की सटीकता और सटीकता पर संदेह करने का विचार कभी भी मेरे दिमाग से पार नहीं हुआ था। सब के बाद, मैं जैसे कार्यों बुला रहा हूँ sin()और sqrt()बहुत सोचा के बिना साल के लिए - क्यों चाहिए math.erf()या scipy.stats.norm.cdf()किसी भी अलग किया जा?

लेकिन अब, मैं चिंतित हूं। मेरे प्रश्न हैं:

  1. सामान्य तौर पर, यदि दस्तावेज़ीकरण कोई विशेष उल्लेख नहीं करता है, तो क्या यह निहित है कि IEEE डबल-सटीक फ़्लोटिंग-पॉइंट द्वारा प्रस्तावित परिशुद्धता के भीतर इस प्रकार के फ़ंक्शन अंतिम दशमलव स्थान के लिए पूरी तरह से सटीक हैं?
  2. क्या यह विशेष रूप से अजगर math.erf()या साइन्सपाय के लिए सही है scipy.stats.norm.cdf()? आप कैसे बता सकते हैं?
  3. इस आदमी पेज के लिएsin() कहता है ...

    ये कार्य सटीकता खो सकते हैं जब उनका तर्क कई पीआई के पास हो या 0.0 से दूर हो।

    जब साइन कार्य आवधिक और सममित होता है, तो ऐसे कैवेट का अस्तित्व क्यों होना चाहिए? ऐसा लगता है कि इष्टतम सटीकता प्राप्त करने के लिए इनपुट को रद्द करने के लिए कॉलर पर एक बोझ रखा गया है।

    दूसरी ओर, मोज़िला के दस्तावेज़ Math.sin()में सटीकता या सटीकता के बारे में कुछ नहीं कहा गया है। क्या इसका मतलब यह है कि यह पूरी तरह से सही है, या यह "सामान्य ज्ञान" है जो Math.sin()केवल कुछ परिस्थितियों में जावास्क्रिप्ट में सटीक होगा, जैसे कि हर जगह?


1
प्रश्न 1 के बारे में FYI करें: आमतौर पर सटीक गारंटी ULP (अंतिम स्थान पर इकाइयां) के संदर्भ में दी जाती है, जो फ्लोट के द्विआधारी अंकों को संदर्भित करता है ।

जवाबों:


10

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

मैं वह धारणा नहीं बनाऊंगा।

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

ऐसा लगता है कि इष्टतम सटीकता प्राप्त करने के लिए इनपुट को रद्द करने के लिए कॉलर पर एक बोझ रखा गया है।

यह एक निष्पक्ष मूल्यांकन है। जो बात स्वीकार्य है वह यह है कि प्रलेखन में कहा गया है, ताकि कोई आश्चर्य न हो।

दूसरी ओर, मोज़िला के दस्तावेज ...

मेरा सुझाव है कि आप प्रत्येक लाइब्रेरी या प्रोग्रामिंग लैंग्वेज में कुछ गणनाएँ आज़माएँ (विशेष रूप से सीमा क्षेत्रों के sin()पास जैसे कई के पास pi), और उनकी तुलना करें। इससे आपको यह अंदाजा लगना चाहिए कि आप हर एक से किस तरह का व्यवहार कर सकते हैं।


2
टेस्ट एक अच्छा विचार है। ऐसे अनगिनत समय हैं जहाँ दस्तावेज़ीकरण एक बात कहता है, फिर भी कार्य दूसरे तरीके से व्यवहार करते हैं। और ओपी निहित धारणाओं पर भरोसा करना चाहता है जो दस्तावेज भी नहीं हैं।
सियुआन रेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.