El misterio del error de precisión de los números de punto flotante 3

Finalmente he podido entender el misterio del error de precisión de los números de punto flotante que afecta a todos los lenguajes de programación. Para explicarlo, voy a emular el trabajo que realiza el computador para almacenar y leer el número decimal 0.1

Como los computadores almacenan todos los números y caracteres en binario, el primer paso es transformar el número decimal 0.1 a su representación binaria. Para ello se sigue un algoritmo sencillo:

1) Se toma el número a transformar y se multiplica por 2:

0.1 * 2 = 0.2

2) Se separa la parte entera de la decimal del valor resultante

La parte entera de 0.2 es 0
La parte decimal de 0.2 es 0.2

3) La parte entera se toma como el primer dígito significativo del número binario

0.0______

3) Se repiten los pasos 1 y 2 usando la parte decimal obtenida del paso anterior.

Este proceso se repite hasta que el resultado de sea cero o se obtenga una secuencia periódica.

Si ejecutamos este proceso completo para el número 0.1 obtenemos lo siguiente:

0.1 * 2 = 0.2 -> 0
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
0.2 * 2 = 0.4 -> 0 (vuelve a reiniciarse la secuencia)

Con esto obtenemos que la representación binaria de 0.1 es:

0.00011... periódico

Como las computadoras tienen una cantidad finita de bits para almacenar cualquier número, los números periódicos se almacenarán truncados. Si asumimos que nuestra computadora solo almacena el valor 0.00011 y no 0.000110011001100110011... (hasta el infinito), la conversión de binario a decimal de este número sería:

0.00011 = 1/16 + 1/32 = 0.09375

Y con esto hemos comprobado como surge un problema de precisión pues 0.1 no es igual a 0.09375, es solo un valor aproximado.

3 thoughts on “El misterio del error de precisión de los números de punto flotante

  1. Reply Pau May 18,2015 10:29 pm

    Muchas gracias!!

  2. Reply asesordocentevenezuela May 28,2015 8:00 pm

    Así es. por eso los algoritmos numéricos se diseñan para controlar y corregir el error por redondeo, mas es inevitable en general. Se habla de estabilidad cuando el algoritmo controla al máximo el error por redondeo y condición del problema que significa que un problema mal condicionado podría reventar aun ante un “algoritmo” estable.

Deja un comentario