Los lenguajes de programación como Scheme (R5RS) y Python ( vea esta pregunta ) se redondean hacia el entero par más cercano cuando el valor está exactamente entre los enteros circundantes.
¿Cuál es el razonamiento detrás de esto?
¿Existe una idea matemática que haga que razonar a continuación sea más fácil de razonar?
(R5RS hace referencia al estándar de coma flotante IEEE como fuente de este comportamiento).
scheme
numbers
numeric-precision
python-3.x
Profpatsch
fuente
fuente
Respuestas:
Hace un tiempo construí un programa de prueba para redondeos sucesivos, porque es básicamente una prueba de esfuerzo en el peor de los casos para un algoritmo de redondeo.
Para cada número del 0 al 9,999, primero se redondea al 10 más cercano, luego al 100 más cercano, luego al 1000 más cercano. (También podría pensar en esto como 10,000 puntos en [0,1) redondeados a 3 lugares, luego a 2, luego a 1.) Este conjunto de números tiene un valor medio de 4999.5.
Si los tres redondeos se realizan utilizando el método de "media vuelta arriba", a continuación, los resultados son como sigue (primera columna es el resultado de redondeo, segunda columna es cómo muchos números redondeados a ese resultado - es decir, es un histograma).
El resultado difiere de un solo "redondeo a la mitad" al millar más cercano 550 veces de 10,000 y el valor redondeado promedio es 5055 (más alto que el promedio original en 55.5).
Si los tres redondeos se realizan "redondeando a la mitad", los resultados son:
El resultado difiere de una sola "mitad hacia abajo" al mil 550 más cercano de 10,000 y el valor redondeado promedio es 4944 (demasiado bajo en 55.5).
Si los tres redondeos se realizan utilizando "redondear medio impar", el resultado es:
El resultado difiere de una sola "mitad redonda impar" a las mil 550 más cercanas de 10,000 y el valor redondeado promedio es 4999.5 (correcto).
Finalmente, si los tres redondeos se realizan utilizando "redondear la mitad par", los resultados son:
El resultado difiere de una sola "mitad redonda pareja" al millar más cercano 450 veces de 10,000 y el valor redondeado promedio es 4999.5 (correcto).
Creo que es obvio que la mitad hacia arriba y la mitad hacia abajo sesgan los valores redondeados, de modo que el promedio de valores redondeados ya no tiene la misma expectativa que el promedio de los valores originales, y que "mitad redondeada par" y "mitad redondeada impar "eliminar el sesgo tratando 5 de una manera la mitad del tiempo y de otra manera la otra mitad. El redondeo sucesivo multiplica el sesgo.
La mitad redonda par y la mitad redonda impar introducen su propio tipo de sesgo en la distribución: un sesgo hacia los dígitos pares e impares, respectivamente. En ambos casos, nuevamente, este sesgo se multiplica por redondeos sucesivos, pero es peor para la mitad de la ronda impar. Creo que la explicación en este caso es simple: 5 es un número impar, por lo que la mitad redonda impar tiene más resultados que terminan en 5 que la mitad redonda, y por lo tanto, más resultados tendrán que ser manejados especialmente en el próximo redondeo.
De todos modos, de las cuatro opciones, solo dos son imparciales, y de las dos elecciones imparciales, la mitad de la ronda incluso proporciona la distribución de mejor comportamiento cuando está sujeta a redondeos repetidos.
fuente
Se llama redondeo bancario. La idea es minimizar el error acumulativo de muchas operaciones de redondeo.
Digamos que siempre redondeaste .5 hacia abajo. Piense en todos esos pequeños pagos de intereses, el banco se embolsó medio centavo cada vez ...
Digamos que siempre redondeó .5 hacia arriba. La contabilidad va a gritar porque estás pagando más intereses de los que deberías.
fuente