Microsoft se ha puesto en el ojo del huracán por culpa de un bug en Office 2007, concretamente en la hoja de cálculo de Excel, en el que algunos valores parecen calcularse incorrectamente. Podemos ver diversos ejemplos en la imagen superior.
En ciertas operaciones, en las que el resultado debería ser 65535 podemos ver como se muestra el número 100000 en lugar del valor correcto. Esto es un problema bastante serio pues podría afectar a todos los cálculos posteriores que se hagan con ese valor.
De todos modos, y dentro de la gravedad del asunto, hay que desdramatizarlo un poco y ponerlo en contexto, ya que el error no es tan grave como aparenta, aunque tampoco hay que desmerecerlo.
Vamos a estudiar un poco cual es el problema. Para ello, hay que conocer como se guardan los números en la memoria del ordenador. Existen diversos sistemas para almacenar números con decimales, pero Excel ha optado por usar el de coma flotante, concretamente el estándar definido por IEEE 754.
Por no hacer esta explicación larga y aburrida simplemente diremos que con esta implementación algunos números no se pueden representar exactamente, sino que lo hacen con un número con muchos decimales significativos que se le aproxima mucho y que, en la mayoría de los casos, nos sirve igual.
El problema de Excel no está en el cálculo de los resultados, el cual hace correctamente, sino a la hora de mostrar estos resultados en pantalla. Es decir, si hacemos la multiplicación 5.1 * 12850 nos dará un resultado que, representado en binario se aproxima mucho a 65535. Pero Excel tiene un bug que hace que ese valor se muestre como 100000.
Pero el resultado se sigue guardando correctamente y podemos comprobarlo si realizamos más operaciones con ese valor. Por ejemplo si en la hoja de cálculo de la imagen insertáramos en una celda el valor F2 * 2 se mostraría como resultado 131070 en lugar de 200000.
Ahora, el bug concreto por el que esto se produce solo lo saben en Microsoft, donde están trabajando en una solución al problema. Este bug, por cierto, solo se produce con 12 valores del total de los 9.214 * 10^18 que se pueden representar en coma flotante.
Más información | Excel Blog.
Ver 10 comentarios