2011-09-09 30 views
11

En C# ¿Hay alguna diferencia en la precisión de las dos estrategias de redondeo decimal MidpointRounding.ToEven y MidpointRounding.AwayFromZero? Quiero decir, ¿ambos aseguran una distribución pareja entre los números que se redondean a, o es una estrategia de redondeo más que representa los números redondeados en comparación con el otro?C# Redondeo MidpointRounding.ToEven frente a MidpointRounding.AwayFromZero

+1

La respuesta aceptada a esta pregunta: http://stackoverflow.com/questions/311696/why-does-net-use-bankers-rounding-as-default debería aclarar las cosas :) Me – MattDavey

+0

piense que el ejemplo a continuación lo explica mejor. :) –

+1

sí, lo hace :) - la pregunta vinculada tiene mucha información de fondo ... – MattDavey

Respuesta

27

De MSDN:

Por defecto, Math.Round utiliza MidpointRounding.ToEven. La mayoría de las personas no están familiarizadas con el "redondeo a la par" como alternativa, "redondear desde cero" se enseña más comúnmente en la escuela. .NET adopta por defecto "Rounding to even", ya que es estadísticamente superior porque no comparte la tendencia de "redondear desde cero" para redondear un poco más seguido de lo que redondea (suponiendo que los números redondeados tienden a ser positivos).)

Dependiendo del conjunto de datos, el redondeo aritmético simétrico puede introducir un sesgo importante, ya que siempre redondea los valores del punto medio hacia arriba. Para tomar un ejemplo simple, supongamos que queremos determinar la media de tres valores, 1.5, 2.5 y 3.5, pero queremos redondearlos primero al entero más cercano antes de calcular su media. Tenga en cuenta que la verdadera media de estos valores es 2.5. Utilizando el redondeo aritmético simétrico, estos valores cambian a 2, 3 y 4, y su media es 3. Utilizando redondeo bancario, estos valores cambian a 2, 2 y 4, y su media es 2.67. Debido a que este último método de redondeo está mucho más cerca de la media real de los tres valores, proporciona la menor pérdida de datos.

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