Errores de Redondeo

| | Comentarios (5) | TrackBacks (0)

Aunque el bug de Excel 2007 ha tenido mucha cobertura, no es primer error de redondeo de la historia, y tampoco el más catastrófico. Y aunque todavía no sabemos que consecuencas pueda tener este nuevo bug de Excel, por lo menos todavía muere nadie por este error.

Pero durante la primera guerra del golfo hubo un error de similar origen, que le costó la vida a 28 marines norteramericanos.

El origen del bug de excel y del error que mató a los marines es el mismo.

Para los que no lo saben, el error en Excel 2007 consiste en que si ustedes multiplican 77,1 por 850 en vez de obtener 65.535, como debería ser, en la celda se refleja el valor 100.000.

El problema no está en el almacenamiento interno del número, sino que en el despliegue de la cifra en pantalla. Joel Spolsky explica muy bien el error, y sugiero que la lean para ver los detalles.

Pero, en forma breve, tenemos que la representación binaria de 77,1 es la siguiente:

0100 0000 0101 0011 0100 0110 0110 0110
0110 0110 0110 0110 0110 0110 0110 0110

Si se fijan bien la secuencia 0110 0110 0110 se repite. Esto es porque el 0,1 no se puede representar en forma exacta en notación binaria. Es lo mismo que pasa en decimal cuando queremos representar 1/3, que queda 0,333333333333333.....

Esta es una cifra decimal periódica, y tiene infinitos 3 "hacia la derecha", bueno, lo mismo pasa con el 0,1 en binario. Por eso que hay que tener cuidado cuando se trabaja con números en punto flotante.
Examinemos las consecuencias trágicas de un bug de este tipo.

El 25 de febrero de 1991 una batería de misiles patriot en Dharan, Arabia Saudita, no pudo detener un misil SCUD Iraquí impactando directamente en una barraca con 28 marines.

patriot.jpg

De acuerdo a un informe oficial sabemos que el misil patriot falló debido a un error acumulado en el cronómetro interno. Resulta que el software usaba un contador que debía incrementarse cada 0,1 segundos para sus cálculos. La batería de misiles patriot llevaba operando 100 horas, lo que acumuló un error de 0,34 segundos, dado que el misil scud se mueve a 1.676 metros por segundo, el misil patriot al ser lanzado ya estaba "desplazado" en casi medio kilómetro del objetivo.

El tipo de error de Excel 2007 y el del misil patriot es de la misma clase, un problema de redondeo, claro que las consecuencias son bien distintas. Sólo esperemos que nadie esté usando Excel 2007 para controlar algún sistema crítico, o del que dependan vidas humanas.

Categorías

, , ,

0 TrackBacks

Abajo se encuentran listados enlaces a este artículo: Errores de Redondeo.

URL de TrackBack URL para esta entrada: http://www.lnds.net/cgi-bin/mt-tb.cgi/1912

5 Comentarios

EduardoE dice:

Ahora estaba leyendo que mientras Excel saca un rojo en matemáticas, el Internet Explorer hace bien las tareas y no se equivoca al hacer redondeos.

Mientras, todo el resto de los navegadores (Safari, Opera, Firefox y todos los derivados de Gecko) cometen error en el redondeo.

Acá hay más información: http://www.kriptopolis.org/explorer-aprueba-matematicas

EduardoE dice:

Actualización del comentario anterior: En realidad Internet Explorer no hace bien las tareas, sino que hace trampa. Más en el enlace anterior.

ymichaud dice:

Excelente artículo, Eduardo. Claro y conciso. Ahora bien, cuando leí el título pensé (no sé porqué...) en mi cuenta corriente y en como el banco en un 99,9% redondea a favor de él. ¿Sabías que el Visual Basic utiliza el redondeo hacia abajo? (De más que lo sabes, si eres experto). En fin, siempre hay algún drama por esto de redondear, y claro, algunos tuvieron que rehacer las tareas luego de la mansaca que debe haber quedado luego de lo del misil...

Menos mal que no era con ojivas nucleares, sino... ándate cabrito!!

Saludox.

Carlos dice:

Prueben este error de redondeo en excel 2003 (supongo que se dará también en otras versiones)

- En la celda A1 escriban: =164.85+34.17+22.58
El resultado es 221.60

- En la celda A2 escriban 221.60

- en la celda A3 escriban (A2-A1)*100000000000000000

El resultado debería ser 0 puesto que A1 y A2 son exactamente iguales. Sin embargo, el excel arroja un valor de 2842.17.

Estuve jugando con los valores y el número que genera el problema es el 164.85, por qué será?

ediaz Author Profile Page dice:

Comprobado en Office 2007.
es importante que notes que ni excel ni ningún programa tienen precisión infinita.
De hecho, el número 221,6 no tiene representación exacta en binario, así que se va a producir un error, en este caso del orden de 2,8 por 10 elevado a -8.
Pero en este caso no creo que sea un bug o fallo, es la naturaleza de los números en punto flotante.
Hay maneras de corregir esto, pero haría de excel una herramienta muy lenta.

Escribir un comentario

(Si no dejó aquí ningún comentario anteriormente, quizás necesite aprobación por parte del dueño del sitio, antes de que el comentario aparezca. Hasta entonces, no se mostrará en la entrada. Gracias por su paciencia).

Introduzca los caracteres que ve en la imagen de arriba.

Sobre esta entrada

Esta página contiene una sola entrada realizada por ediaz y publicada el 27 de Septiembre 2007 11:08 PM.

El eslabón más debil es la entrada anterior en este blog.

Berkeley en Youtube es la entrada siguiente en este blog.

Encontrará los contenidos recientes en la página principal. Consulte los archivos para ver todos los contenidos.

Technorati

Technorati search

» Blogs que enlazan aquí

Creative Commons License
Este weblog está licenciado bajo una Licencia Creative Commons.

BloGalaxia website stats
Google
Encuentro Blogpower 2008