¿Por qué algunos idiomas redondean al entero EVEN más cercano?

44

Lenguajes de programación como Scheme (R5RS) y Python ( vea esta Pregunta ) ronda 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?
¿Hay alguna idea matemática que facilite el razonamiento de los siguientes cálculos?

(R5RS hace referencia al estándar de punto flotante IEEE como fuente de este comportamiento).

    
pregunta Profpatsch 14.09.2014 - 17:34

2 respuestas

39

Hace un tiempo construí un programa de prueba para el redondeo sucesivo, porque es básicamente una prueba de estrés 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 que esto se redondea a 10,000 puntos en [0,1) 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 "redondear a la mitad", los resultados son los siguientes (la primera columna es el resultado de la redondeo, la segunda columna es cómo muchos números se redondearon a ese resultado - es decir, es un histograma).

0     445
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 555

El resultado difiere de una "media vuelta arriba" a mil mil veces más 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:

0     556
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 444

El resultado difiere de una "mitad redonda abajo" a las mil 550 más cercanas a 10,000 y el valor redondeado promedio es 4944 (demasiado bajo por 55.5).

Si los tres redondeos se realizan utilizando "round half odd", el resultado es:

0     445
1000  1111
2000  889
3000  1111
4000  889
5000  1111
6000  889
7000  1111
8000  889
9000  1111
10000 444

El resultado difiere de una sola "mitad redonda impar" a las mil 550 más cercanas a 10,000 y el valor promedio redondeado es 4999.5 (correcto).

Finalmente, si los tres redondeos se realizan utilizando "round half even", los resultados son:

0     546
1000  909
2000  1091
3000  909
4000  1091
5000  909
6000  1091
7000  909
8000  1091
9000  909
10000 1091

El resultado difiere de una "mitad redonda" a los mil 450 más cercanos de 10,000 y el valor redondeado promedio es 4999.5 (correcto).

Creo que es obvio que la mitad redondeada hacia arriba y hacia la mitad hacia abajo sesga los valores redondeados, de modo que el promedio de los valores redondeados ya no tiene la misma expectativa que el promedio de los valores originales, y que "redondea la mitad" y " redondee la mitad impar "elimine el sesgo tratando 5 de una manera la mitad del tiempo y la otra forma de la otra mitad. El redondeo sucesivo multiplica el sesgo.

La mitad redondeada par y la mitad par impar introducen su propio tipo de sesgo en la distribución: un sesgo hacia dígitos pares e impares, respectivamente. En ambos casos, nuevamente, este sesgo se multiplica por redondeo sucesivo, 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 round half odd tiene más resultados que terminan en 5 que round half par - y por lo tanto, más resultados que deberán ser manejados especialmente por el next redondeo.

De todos modos, de las cuatro opciones, solo dos son insesgadas, y de las dos opciones no sesgadas, la mitad redondeada incluso ofrece la mejor distribución cuando está sujeta a redondeo repetido.

    
respondido por el hobbs 15.09.2014 - 10:51
55

Se llama redondeo bancario. La idea es minimizar el error acumulativo de muchas operaciones de redondeo.

Digamos que siempre redondeas .5 hacia abajo. Piense en todos esos pequeños pagos de intereses, el banco se embolsa medio centavo cada vez ...

Digamos que siempre redondeas .5 hacia arriba. La contabilidad va a gritar porque estás pagando más intereses de los que deberías.

    
respondido por el Loren Pechtel 14.09.2014 - 18:09

Lea otras preguntas en las etiquetas