Errores de cálculo

En estos días en los que muchos procesos dependen de ordenadores, no deja de resultar curioso la poca preocupación despertada ante los posibles fallos en los cálculos que la máquina utiliza. Y para muestra tres botones.

Error de división en el Intel Pentium
Descubierto hace unos años, ocasionó un gran revuelo en su momento. Se trataba de un error de precisión en las operaciones de coma flotante (en un lenguaje más sencillo, con decimales) realizadas por el procesador.
Error de división en Office Excel 2007
Mucho más reciente, este error se manifiesta cuando se realiza la multiplicación 85*77’1 el resultado que aparece es 100000 en lugar de 65.535. Posiblemente se deba a un desbordamiento en el formato numérico (65.535 es el máximo valor para un entero representado con 16 bits) que no se convierte a otro formato que lo soporte correctamente.
Error en la resta de los navegadores
Es el más reciente. En este caso basta con la sencilla resta 5’2-0’1 en javascript (ejecutada en un script o escribiendo en la barra de direcciones javascript:5.2-0.1) para que todos los navegadores, exceptuando IE7, devuelvan un resultado erróneo.

La explicación en casi todos estos casos es la misma: la representación numérica de los ordenadores. Un ordenador utiliza formatos binarios para representar los números. Estos formatos pueden tener problemas para representar ciertos valores de forma exacta, sobre todo cuando implican el uso de decimales. Estas pequeñas variaciones hacen que se propaguen errores a partir de la decena de decimales (que no influye notablemente al no requerirse normalmente tanta precisión).

En otros casos el problema es el rango de representación. Si tenemos un entero de 16 bits, se puede alcanzar el valor 216-1=65.535. El número 65.536 supondrá “dar la vuelta al cuenta-kilómetros” y volver a 0 salvo que se pase a otro formato con mayor rango como puede ser un entero de 32 bits o un valor en coma flotante (introduciendo el problema de la exactitud).

Para subsanar estos problemas, las aplicaciones más críticas utilizan bibliotecas especiales capaces de proporcionar una gigantesca precisión sin error, a costa de un mayor tiempo para hacer los cálculos. Pero las aplicaciones más generales no las utilizan por lo que hay que revisar un poco los cálculos😉