कुछ भाषाएं निकटतम EVEN पूर्णांक के लिए क्यों चलती हैं?


44

प्रोग्रामिंग भाषाएँ जैसे स्कीम (R5RS) और पायथन ( इस प्रश्न को देखें ) पास के पूर्णांक की ओर गोल होती है जब मूल्य आसपास के पूर्णांकों के बीच होता है।

इसके पीछे क्या कारण है?
क्या कोई गणितीय विचार है जो निम्नलिखित गणनाओं को तर्क के लिए आसान बनाता है?

(R5RS इस व्यवहार के स्रोत के रूप में IEEE फ़्लोटिंग पॉइंट मानक का संदर्भ देता है।)



1
IEEE कई राउंडिंग मोड की अनुमति देता है। यह उनमें से एक है। कुछ भाषाएं निष्पादन के दौरान गोलाई मोड को बदलने की भी अनुमति देती हैं।
टोबियास ब्रांड

5
आप विकिपीडिया पर चक्कर लगाने और उनमें से प्रत्येक के पीछे तर्क के लिए टाई-ब्रेकिंग सेक्शन को पढ़ना चाह सकते हैं।


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

जवाबों:


39

कुछ समय पहले मैंने क्रमिक गोलाई के लिए एक परीक्षण कार्यक्रम का निर्माण किया, क्योंकि यह मूल रूप से एक गोलाई एल्गोरिदम के लिए सबसे खराब स्थिति का तनाव परीक्षण है।

0 से 9,999 तक की प्रत्येक संख्या के लिए यह पहले 10 के पास और फिर निकटतम 100 तक, फिर निकटतम 1000 पर पहुंच जाता है। (आप इसे 0 अंक में 10,000 अंकों के रूप में भी सोच सकते हैं] 3 स्थानों पर गोल किया जा रहा है, फिर 2 से, फिर 1.) इस संख्या के सेट का माध्य मान 4999.5 है।

यदि "राउंड हाफ अप" विधि का उपयोग करके सभी तीन राउंडिंग की जाती है, तो परिणाम निम्नानुसार हैं (पहला कॉलम राउंडिंग परिणाम है, दूसरा कॉलम उस परिणाम के लिए कितने नंबर राउंड है - यानी यह हिस्टोग्राम है)।

0     445
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 555

परिणाम 10,000 में से एकल "राउंड हाफ अप" से निकटतम निकटतम 550 से 550 गुना और औसत राउंडेड मूल्य 5055 (मूल औसत 55.5 से अधिक) है।

यदि तीनों राउंडिंग "राउंड हाफ डाउन" द्वारा की जाती हैं, तो परिणाम निम्न हैं:

0     556
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 444

परिणाम 10,000 में से एक एकल "राउंड हाफ डाउन" से निकटतम निकटतम 550 गुना तक भिन्न होता है और औसतन राउंडेड मूल्य 4944 (55.5 से बहुत कम) है।

यदि सभी तीन राउंडिंग "राउंड हाफ विषम" का उपयोग करके की जाती है, तो परिणाम है:

0     445
1000  1111
2000  889
3000  1111
4000  889
5000  1111
6000  889
7000  1111
8000  889
9000  1111
10000 444

परिणाम 10,000 में से एक "राउंड हाफ विषम" से निकटतम हज़ार 550 तक होता है और औसत राउंडेड मूल्य 4999.5 (सही) है।

अंत में, यदि सभी तीन राउंडिंग "राउंड हाफ इवन" का उपयोग करके की जाती है, तो परिणाम निम्न हैं:

0     546
1000  909
2000  1091
3000  909
4000  1091
5000  909
6000  1091
7000  909
8000  1091
9000  909
10000 1091

परिणाम 10,000 में से एक एकल "राउंड हाफ" से निकटतम निकटतम 450 बार में भिन्न होता है और औसत राउंडेड मूल्य 4999.5 (सही) है।

मुझे लगता है कि यह स्पष्ट है कि राउंड हाफ अप और राउंड हाफ डाउन बायस्ड राउंड वैल्यूज, ताकि राउंडेड वैल्यू का औसत अब मूल मानों के औसत के समान ही हो, और वह "राउंड हाफ भी" और "राउंड हाफ विषम" हो। “आधे समय में 5 एक तरह से और दूसरे आधे तरीके से इलाज करके पूर्वाग्रह को हटा दें। क्रमिक गोलाई पूर्वाग्रह को गुणा करता है।

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

इसलिए, चार विकल्पों में से, केवल दो निष्पक्ष हैं, और दो निष्पक्ष विकल्पों में से, गोल आधा भी सबसे अच्छा व्यवहार वितरण देता है जब दोहराया गोलाई के अधीन।


55

इसे बैंकर की गोलाई कहते हैं। विचार कई गोल संचालन से संचयी त्रुटि को कम करने के लिए है।

कहते हैं कि तुम हमेशा गोल .5 नीचे। उन सभी छोटे ब्याज भुगतानों के बारे में सोचें, जो हर बार बैंक को आधा प्रतिशत देते हैं ...

कहते हैं कि तुम हमेशा गोल .5 ऊपर। लेखांकन चिल्लाने वाला है क्योंकि आप अपनी रुचि से अधिक ब्याज का भुगतान कर रहे हैं।


6
लेकिन क्यों और भी अजीब नहीं है?
शाफ़्ट ने

17
@ratchetfreak - इतने कम संख्या में गोल, दूर नहीं, शून्य। इसके अलावा, यह मनमाना है - कुछ होना चाहिए।
जोनाथन डर्सी

15
@ratchetfreak: यदि आप संख्या 1 से शुरू करते हैं, तो 2 से विभाजित करें, और विषम में गोल हो जाए तो क्या होगा? आपको १.५ राउंड मिलता है। १ अगर आप फिर से २ से भाग करते हैं तो क्या होगा? आप 0.5 से 1. पर गोल हो जाते हैं। कभी शून्य नहीं होता।
gnasher729

13
मुझे लगता है कि विषम संख्याओं के लिए भी संख्याओं को प्राथमिकता दी जानी चाहिए क्योंकि वे बाद में होने वाली दुविधाओं की आवश्यकता के लिए संभावना को कम करते हैं । (बिल्कुल) दो के बजाए अभ्यास में भाग लेना।
मार्क वैन लीउवेन

4
आंकड़ों में भी यह महत्वपूर्ण है। यदि डेटा सेट के प्रत्येक अंश को गोल किया जाता है, तो वर्णनात्मक आँकड़े जैसे कि इसका मतलब यह होगा कि अगर यह नीचे की ओर गोल है तो (थोड़ा) अधिक होगा। केनेथ रोथमैन का परिचय महामारी विज्ञान में विशेष रूप से हमेशा गोल टर्मिनल 5।
विल मर्फी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.