2011-09-09 14 views
11

सी # में क्या दो दशमलव राउंडिंग रणनीतियों की सटीकता में कोई अंतर है MidpointRounding.ToEven और MidpointRounding.AwayFromZero? मेरा मतलब है कि दोनों संख्याओं के बीच एक वितरण भी सुनिश्चित करते हैं, या दूसरे की तुलना में गोलाकार संख्याओं का प्रतिनिधित्व करने पर एक गोल करने की रणनीति है?सी # राउंडिंग मिडपॉइंट राउंडिंग। टूवेन बनाम MidpointRounding.AwayFromZero

+1

इस सवाल का जवाब स्वीकार किए जाते हैं: http://stackoverflow.com/questions/311696/why-does-net-use-bankers-rounding-as-default बातें स्पष्ट करना चाहिए :) – MattDavey

+0

मैं लगता है कि नीचे दिया गया उदाहरण बेहतर बताता है। :) –

+1

हाँ, यह करता है :) - जुड़े प्रश्न में बहुत सारी पृष्ठभूमि जानकारी है .. – MattDavey

उत्तर

27

MSDN से:

डिफ़ॉल्ट रूप से, गणित.गोल MidpointRounding.ToEven उपयोग करता है। अधिकांश लोग विकल्प के रूप में "गोल करने के लिए" से परिचित नहीं हैं, "शून्य से घूमने" को स्कूल में अधिक सामान्य रूप से पढ़ाया जाता है। .NET "यहां तक ​​कि गोल करने" के लिए डिफ़ॉल्ट रूप से बेहतर है क्योंकि यह सांख्यिकीय रूप से बेहतर है क्योंकि यह "शून्य से घूमने" की प्रवृत्ति को साझा करने के लिए थोड़ा अधिक बार गोल करने के लिए साझा नहीं करता है (माना जाता है कि गोल होने वाली संख्या सकारात्मक होती है।)

डेटा सेट के आधार पर, सममित अंकगणितीय गोलाकार एक प्रमुख पूर्वाग्रह पेश कर सकता है, क्योंकि यह हमेशा मध्यबिंदु मानों को ऊपर की तरफ ले जाता है। एक साधारण उदाहरण लेने के लिए, मान लीजिए कि हम तीन मानों, 1.5, 2.5, और 3.5 के माध्य को निर्धारित करना चाहते हैं, लेकिन हम पहले उन्हें अपने माध्य की गणना करने से पहले निकटतम पूर्णांक में ले जाना चाहते हैं। ध्यान दें कि इन मानों का सही अर्थ 2.5 है। सममित अंकगणितीय गोलाकार का उपयोग करके, ये मान 2, 3, और 4 में बदल जाते हैं, और उनका मतलब 3 है। बैंकरों का उपयोग करके, ये मान 2, 2, और 4 में बदल जाते हैं, और उनका मतलब 2.67 है। चूंकि उत्तराधिकारी विधि तीन मानों के वास्तविक अर्थ के करीब है, यह डेटा की कम से कम हानि प्रदान करती है।

http://msdn.microsoft.com/en-us/library/system.math.round.aspx

संबंधित मुद्दे