2011-09-09 2 views
11

C#에서 두 소수 반올림 전략 MidpointRounding.ToEvenMidpointRounding.AwayFromZero의 정확도에는 차이가 있습니까? 둘 다 반올림되는 숫자 사이에서 균등하게 분배되는 것을 보장합니까 아니면 반올림 된 값을 다른 반올림 된 숫자로 나타내는 것보다 하나의 반올림 전략입니까?C# 반올림 중점 반올림 .ToEven 대 중간 점 라운딩 .AwayFromZero

MSDN에서
+1

이 질문에 대한 허용 대답 : http://stackoverflow.com/questions/311696/why-does-net-use-bankers-rounding-as-default는 :) – MattDavey

+0

나는 물건을 정리한다 아래 예제에서 더 잘 설명한다고 생각해보십시오. :) –

+1

네, 그렇습니다. - 링크 된 질문은 많은 배경 정보를 가지고 있습니다. – MattDavey

답변

27

: 기본적으로

는 Math.Round는 MidpointRounding.ToEven를 사용합니다. 대부분의 사람들은 대안으로 "균등하게"반올림하는 것에 익숙하지 않으며, "0에서 반올림"은 학교에서보다 일반적으로 가르쳐집니다. .NET은 "0에서 반올림"이 반올림하는 것보다 약간 더 반올림하는 경향을 공유하지 않기 때문에 (통계적으로 우수하므로 반올림되는 숫자가 양수가되는 경향이 있다고 가정 할 때 통계적으로 우월합니다.)

데이터 세트에 따라 좌우 대칭 산술 라운딩은 중간 값을 항상 위쪽으로 반올림하므로 주요 바이어스를 유발할 수 있습니다. 간단한 예를 들어, 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