आपकी वृत्ति मूल रूप से सही है, आरोही क्रम में (परिमाण की) छँटाई आमतौर पर कुछ हद तक सुधार करती है। उस मामले पर विचार करें जहां हम एकल-परिशुद्धता (32 बिट) तैर रहे हैं, और 1/1 (1 बिलियन) के बराबर 1 बिलियन मान हैं, और 1 के बराबर एक मान। यदि 1 पहले आता है, तो योग आएगा 1 से, 1 के बाद से (1/1 बिलियन) 1 परिशुद्धता के नुकसान के कारण है। प्रत्येक जोड़ पर कुल मिलाकर कोई प्रभाव नहीं होता है।
यदि छोटे मूल्य पहले आते हैं, तो वे कम से कम कुछ करने के लिए योग करेंगे, हालांकि तब भी मेरे पास उनमें से 2 ^ 30 हैं, जबकि 2 ^ 25 के बाद या इसलिए मैं उस स्थिति में वापस आ गया हूं जहां प्रत्येक व्यक्ति व्यक्तिगत रूप से कुल को प्रभावित नहीं कर रहा है। और भी। इसलिए मुझे अभी और तरकीबें चाहिए।
यह एक चरम मामला है, लेकिन सामान्य तौर पर समान परिमाण के दो मूल्यों को जोड़ना बहुत अलग परिमाण के दो मूल्यों को जोड़ने से अधिक सटीक है, क्योंकि आप छोटे मूल्य में सटीक तरीके से कम बिट्स को "त्याग" करते हैं। संख्याओं को क्रमबद्ध करके, आप समान परिमाण के मानों को एक साथ जोड़ते हैं, और उन्हें बढ़ते क्रम में जोड़कर आप छोटे मानों को संचयी रूप से बड़ी संख्याओं के परिमाण तक पहुंचने का "मौका" देते हैं।
फिर भी, यदि नकारात्मक संख्याएं शामिल हैं, तो इस दृष्टिकोण को "आउट" करना आसान है। योग करने के लिए तीन मूल्यों पर विचार करें {1, -1, 1 billionth}
। अंकगणितीय रूप से सही योग है 1 billionth
, लेकिन यदि मेरे पहले जोड़ में छोटे मूल्य शामिल हैं, तो मेरी अंतिम राशि 6 में से 0. संभावित आदेश होंगे, केवल 2 "सही" हैं - {1, -1, 1 billionth}
और {-1, 1, 1 billionth}
। सभी 6 आदेश परिणाम देते हैं जो इनपुट में सबसे बड़े-परिमाण मान के पैमाने पर सटीक हैं (0.0000001% बाहर), लेकिन उनमें से 4 के लिए परिणाम सही समाधान (100% बाहर) के पैमाने पर गलत है। आपके द्वारा हल की जा रही विशेष समस्या आपको बताएगी कि पूर्व पर्याप्त है या नहीं।
वास्तव में, आप केवल क्रमबद्ध क्रम में उन्हें जोड़ने की तुलना में बहुत अधिक चालें खेल सकते हैं। यदि आपके पास बहुत छोटे मूल्य हैं, एक मध्यम संख्या में मिडिलिंग मान, और बहुत सारे बड़े मूल्य हैं, तो सबसे पहले सभी छोटे लोगों को जोड़ना सबसे सटीक हो सकता है, फिर अलग-अलग कुल मिडिलिंग वाले, उन दो योगों को जोड़ सकते हैं फिर एक साथ बड़े लोगों को जोड़ें। फ़्लोटिंग-पॉइंट परिवर्धन का सबसे सटीक संयोजन खोजने के लिए यह बिल्कुल भी तुच्छ नहीं है, लेकिन वास्तव में बुरे मामलों से निपटने के लिए आप अलग-अलग परिमाण में चल रहे कुल योग रख सकते हैं, प्रत्येक नए मान को उस कुल में जोड़ सकते हैं जो इसकी परिमाण से मेल खाता है, और जब एक रनिंग टोटल अपने परिमाण के लिए बहुत बड़ा होने लगता है, तो इसे अगले टोटल में जोड़ें और एक नई शुरुआत करें। अपने तार्किक चरम पर ले जाया गया, यह प्रक्रिया एक मनमाना-सटीक प्रकार में योग करने के बराबर है (इसलिए आप ' घ) करते ह)। लेकिन परिमाण के अवरोही या अवरोही क्रम में जोड़ने का सरलीकृत विकल्प दिया जाता है, आरोही बेहतर शर्त है।
इसका वास्तविक दुनिया की प्रोग्रामिंग से कुछ संबंध है, क्योंकि कुछ ऐसे मामले हैं जहां आपकी गणना बहुत बुरी तरह से गलत हो सकती है यदि आप गलती से "भारी" पूंछ काट देते हैं जिसमें बड़ी संख्या में मान शामिल होते हैं जिनमें से प्रत्येक व्यक्तिगत रूप से प्रभावित करने के लिए बहुत छोटा है। योग, या यदि आप बहुत छोटे मूल्यों से बहुत अधिक सटीकता को फेंक देते हैं जो व्यक्तिगत रूप से केवल राशि के अंतिम कुछ बिट्स को प्रभावित करते हैं। ऐसे मामलों में जहां पूंछ वैसे भी नगण्य होती है, शायद आप परवाह न करें। उदाहरण के लिए यदि आप पहली बार केवल एक साथ बहुत सारे मान जोड़ रहे हैं और आप केवल राशि के कुछ महत्वपूर्ण आंकड़ों का उपयोग कर रहे हैं।