संख्यात्मक विश्लेषण में, विनाशकारी रद्दीकरण[1][2] यह घटना है कि अच्छे सन्निकटन को दो पास की संख्याओं से घटाना मूल संख्याओं के अंतर के लिए बहुत खराब सन्निकटन प्राप्त कर सकता है।
उदाहरण के लिए, यदि दो स्टड हैं, तो एक लंबा और दूसरा लंबा, और वे एक शासक के साथ मापा जाता है जो केवल सेंटीमीटर के लिए अच्छा होता है, तो सन्निकटन निकल सकता है तथा . ये अच्छे सन्निकटन हो सकते हैं, सापेक्ष त्रुटि में, सही लंबाई के लिए: सन्निकटन सही लंबाई के 2% से कम की त्रुटि में हैं, .
हालाँकि, यदि अनुमानित लंबाई घटा दी जाए, तो अंतर होगा , भले ही लंबाई के बीच सही अंतर है . अनुमानों का अंतर, , वास्तविक मानों के अंतर के परिमाण के 100% त्रुटि में है, .
आपदाजनक रद्दीकरण तब भी हो सकता है जब अंतर की ठीक-ठीक गणना की गई हो, जैसा कि ऊपर दिए गए उदाहरण में है—यह फ्लोटिंग-पॉइंट अंकगणित की तरह किसी विशेष प्रकार के अंकगणित का गुण नहीं है; बल्कि, यह घटाव में निहित है, जब इनपुट स्वयं सन्निकटन होते हैं। वास्तव में, फ्लोटिंग-पॉइंट अंकगणित में, जब इनपुट पर्याप्त रूप से करीब होते हैं, तो फ्लोटिंग-पॉइंट अंतर की गणना ठीक से की जाती है, स्टरबेंज़ लेम्मा द्वारा - फ़्लोटिंग-पॉइंट घटाव ऑपरेशन द्वारा पेश की गई कोई राउंडिंग त्रुटि नहीं होती है।
औपचारिक रूप से, विनाशकारी रद्दीकरण होता है क्योंकि घटाव पास के इनपुट पर खराब स्थिति में होता है: भले ही सन्निकटन तथा छोटी सापेक्ष त्रुटि है तथा सच्चे मूल्यों से तथा , क्रमशः, अनुमानित अंतर की सापेक्ष त्रुटि वास्तविक अंतर से वास्तविक अंतर के व्युत्क्रमानुपाती होता है:
इस प्रकार, सटीक अंतर की सापेक्ष त्रुटि अंतर से सन्निकटन की वास्तविक संख्या है
जो सही इनपुट होने पर मनमाने ढंग से बड़ा हो सकता है तथा करीब हैं।
संख्यात्मक एल्गोरिदम में
फ्लोटिंग-पॉइंट अंकगणित में आस-पास की संख्याओं को घटाना हमेशा विपत्तिपूर्ण रद्दीकरण का कारण नहीं बनता है, या यहां तक कि कोई भी त्रुटि - स्टरबेंज़ लेम्मा द्वारा, यदि संख्याएँ पर्याप्त रूप से पास हैं तो फ़्लोटिंग-पॉइंट अंतर सटीक है।
लेकिन रद्द करने से उन इनपुट में त्रुटियां बढ़ सकती हैं जो अन्य फ्लोटिंग-पॉइंट अंकगणित में राउंडिंग से उत्पन्न हुई हैं।
उदाहरण: वर्गों का अंतर
दिए गए अंक तथा , गणितीय कार्य की गणना करने का भोला प्रयास
फ़्लोटिंग-पॉइंट अंकगणित द्वारा
विनाशकारी रद्दीकरण के अधीन है जब तथा परिमाण में करीब हैं, क्योंकि घटाव वर्ग में गोल करने की त्रुटियों को उजागर कर सकता है।
वैकल्पिक फैक्टरिंग
,
फ़्लोटिंग-पॉइंट अंकगणित द्वारा मूल्यांकन किया गया
,
विपत्तिपूर्ण रद्दीकरण से बचा जाता है क्योंकि यह घटाव की ओर ले जाने वाली राउंडिंग त्रुटि को शुरू करने से बचता है।[2]
उदाहरण के लिए, यदि
तथा
,
फिर अंतर का सही मूल्य
है
.
डबल-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप अंकगणित में, वैकल्पिक फैक्टरिंग का मूल्यांकन
बिल्कुल सही परिणाम देता है (बिना गोल के), लेकिन भोली अभिव्यक्ति का मूल्यांकन करता है
फ़्लोटिंग-पॉइंट नंबर देता है
,
जिनमें से आधे से कम अंक सही हैं और अन्य (रेखांकित) अंक लापता पदों को दर्शाते हैं , मध्यवर्ती वर्ग मानों की गणना करते समय पूर्णांकन के कारण खो गया।
उदाहरण: कॉम्प्लेक्स आर्क्सिन
व्युत्क्रम त्रिकोणमितीय कार्यों की गणना करते समय # जटिल समतल कार्य के लिए विस्तार, किसी को सीधे लघुगणकीय सूत्र का उपयोग करने के लिए लुभाया जा सकता है:
हालाँकि, मान लीजिए के लिये .
फिर तथा ; उनके बीच अंतर कहते हैं —एक बहुत छोटा अंतर, लगभग शून्य।
यदि फ़्लोटिंग-पॉइंट अंकगणितीय देने में मूल्यांकन किया जाता है
किसी त्रुटि के साथ , कहाँ पे फ़्लोटिंग-पॉइंट राउंडिंग को दर्शाता है, फिर अंतर की गणना करता है
पास की दो संख्याएँ, दोनों बहुत करीब , त्रुटि को बढ़ा सकता है के एक कारक द्वारा एक इनपुट में —एक बहुत बड़ा कारक क्योंकि लगभग शून्य था।
उदाहरण के लिए, अगर , का सही मूल्य लगभग है , लेकिन डबल-सटीक फ़्लोटिंग-पॉइंट प्रारूप अंकगणित में सहज लघुगणकीय सूत्र का उपयोग कर सकता है , सोलह अंकों में से केवल पाँच सही और शेष (रेखांकित) सभी कचरा।
के मामले में के लिये , पहचान का उपयोग करना रद्दीकरण से बचाता है क्योंकि लेकिन , इसलिए घटाना प्रभावी रूप से उसी चिन्ह के साथ जोड़ है जो रद्द नहीं करता है।
उदाहरण: मूलांक रूपांतरण
सॉफ़्टवेयर प्रोग्राम में संख्यात्मक स्थिरांक अक्सर दशमलव में लिखे जाते हैं, जैसे कि C खंड में double x = 1.000000000000001; IEEE 754 बाइनरी 64 वैरिएबल को घोषित करने और आरंभ करने के लिए x.
हालांकि, बाइनरी 64 फ़्लोटिंग-पॉइंट नंबर नहीं है; निकटतम, जो x को इस खंड में प्रारंभ किया जाएगा, है .
हालांकि दशमलव फ़्लोटिंग-पॉइंट से बाइनरी फ़्लोटिंग-पॉइंट तक रेडिक्स रूपांतरण में केवल एक छोटी सापेक्ष त्रुटि होती है, विपत्तिपूर्ण रद्दीकरण इसे बहुत बड़े में बढ़ा सकता है:
अंतर है .
की सापेक्ष त्रुटियाँ x से और का y से दोनों नीचे हैं , और फ़्लोटिंग-पॉइंट घटाव y - x बिल्कुल स्टरबेंज़ लेम्मा द्वारा गणना की जाती है।
लेकिन भले ही इनपुट अच्छे सन्निकटन हों, और भले ही घटाव की गणना ठीक-ठीक की गई हो, सन्निकटन का अंतर ओवर की सापेक्ष त्रुटि है अंतर से दशमलव में लिखे गए मूल मानों में से: विनाशकारी रद्दीकरण ने मूलांक रूपांतरण में एक छोटी सी त्रुटि को आउटपुट में एक बड़ी त्रुटि में बदल दिया।
सौम्य रद्दीकरण
संख्यात्मक एल्गोरिदम में रद्दीकरण कभी-कभी उपयोगी और वांछनीय होता है।
उदाहरण के लिए, 2Sum एल्गोरिदम दोनों राउंडिंग त्रुटि के बाद इस तरह के रद्दीकरण पर भरोसा करते हैं ताकि फ़्लोटिंग-पॉइंट जोड़ ऑपरेशन में फ़्लोटिंग-पॉइंट नंबर के रूप में त्रुटि की सटीक गणना की जा सके।
कार्यक्रम
,
यदि बिंदुओं पर भोलेपन से मूल्यांकन किया जाए
,
के अधिकांश अंक खो देंगे गोलाई में
.
हालाँकि, समारोह
पास के इनपुट पर ही अच्छी तरह से वातानुकूलित है .
के रूप में पुनः लिख रहा हूँ
में रद्दीकरण का शोषण करता है
से त्रुटि से बचने के लिए
सीधे मूल्यांकन किया।[2]यह काम करता है क्योंकि अंश में रद्दीकरण
और denominator में रद्दीकरण
एक दूसरे का प्रतिकार करें; कार्यक्रम
शून्य के पास अच्छी तरह से वातानुकूलित है
का अच्छा अनुमान देता है
,
और इस तरह
का अच्छा अनुमान देता है
.