2011-09-09 15 views
11

In C#2小数点以下切り上げ戦略MidpointRounding.ToEvenMidpointRounding.AwayFromZeroの精度に違いはありますか?私は、丸められた数値の間に均等な分布を保証するか、または丸められた数値を他の丸められた数値と比べて表すための1つの丸め戦略ですか? MSDNからC#丸め中点丸め.Tevenと中点丸め.AwayFromZero

+1

この質問への受け入れ答え:http://stackoverflow.com/questions/311696/why-does-net-use-bankers-rounding-as-defaultは:) – MattDavey

+0

Iを物事をクリアする必要があります以下の例がそれをよりよく説明すると思う。 :) –

+1

ええ、そうです:) - リンクされた質問には多くの背景情報があります。 – MattDavey

答えて

27

:デフォルトでは

、恐らくMath.roundはMidpointRounding.ToEvenを使用しています。ほとんどの人は、「ゼロに丸める」という選択肢を「均等に丸める」ことに慣れていないため、学校でより一般的に教えられています。 .NETは、丸められる数値が正の値であると仮定すると、丸められるよりも少し丸められる傾向に「ゼロから丸める」傾向を共有しないため、統計的に優れているため、「丸めようとする」という既定値になります。 )

データセットによっては、常に中央値を上に丸めるため、対称算術丸めによって大きな偏りが生じる可能性があります。単純な例を取るために、1.5,2.5,3.5という3つの値の平均値を求めたいとしますが、その平均値を計算する前に最初に最も近い整数に丸めたいとします。これらの値の真の平均は2.5であることに注意してください。公式算術四捨五入を使用すると、これらの値は2,3,4に変化し、その平均は3です。バンカーの丸めを使用すると、これらの値は2,2,4に変化し、その平均は2.67です。後者の丸め方法は3つの値の真の平均に非常に近いので、データの損失を最小限に抑えます。

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