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
Respuesta
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
- 1. Redondeo a par en C#
- 2. Truncar Dos lugares decimales sin redondeo
- 3. . Redondeo .Net Problema
- 4. ¿Hay alguna manera de hacer el redondeo aritmético "correcto" en .NET?/C#
- 5. Objective-C Float redondeo
- 6. Redondeo a 100
- 7. C - redondeo de coma flotante
- 8. C# parámetros frente a devoluciones
- 9. C++ int frente a largo
- 10. Cómo acercarse mejor a los decimales de redondeo en C#
- 11. Redondeo a 2 lugares decimales
- 12. ¿Cómo redondeo a 2 decimales?
- 13. ¿Cuáles son los beneficios de usar C# frente a F # o F # frente a C#?
- 14. NUnit frente a MbUnit frente a MSTest frente a xUnit.net
- 15. C# Cómo dividir decimales sin redondeo implícito
- 16. Redondeo de valores dobles en C#
- 17. Truncar doble sin redondeo en C
- 18. Redondeo NSDecimalNumber
- 19. C++ redondeo de números lejos de cero
- 20. Redondeo de números dobles en Objective-C
- 21. Cómo cortar decimal sin redondeo en C
- 22. Redondeo personalizado de tipo decimal en C#
- 23. C tenedor frente a la variable global
- 24. C# terreno frente a la propiedad
- 25. Objective-C frente a las declaraciones #imports
- 26. C# Matemáticas frente a XNA MathHelper
- 27. C++ Herencia virtual múltiple frente a COM
- 28. constructores frente a Initializors en C#
- 29. Qt: clases Qt frente a estándar C++
- 30. más (+) frente a menos (-) en Objective-C
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
piense que el ejemplo a continuación lo explica mejor. :) –
sí, lo hace :) - la pregunta vinculada tiene mucha información de fondo ... – MattDavey