Un profesor amigo mío a menudo afirma que las tareas del ingeniero son 3: revisar, revisar y revisar. No consiste en ser el más listo, ni el más rápido, sino en asegurarse que la tecnología funcione sin fallos y de la manera prevista. Y en este artículo pretendo defender dos casos que representan perfectamente el grado de precisión y repaso que hay que mantener en aplicaciones de alta tecnología.
Tan crucial es que, en el primer ejemplo a presentar, ese error humano y de ingeniería costó 28 vidas, y ocurrió concretamente en la Guerra del Golfo. Aquella noche, un error de 9,5×10-9 segundos tuvo la culpa. Un parpadeo abarca entre 300 y 400 milisegundos, diez millones de veces más lento.
El 25 de febrero de 1991, en un momento de la noche, el fuego mordió el cielo y un misil Scud iraquí viajó a más de 1.600 m/s hasta un cuartel a las afueras de Dhahran (Arabia Saudí). Una batería de misiles Patriot estadounidenses debería haberlo interceptado en pleno vuelo, pero no lo logró. Aquella madrugada, murieron 28 soldados estadounidenses. ¿A qué se debió el error? A la ingeniería.
Los ordenadores internos de los Patriot almacenaban los números reales en formato binario, con una precisión máxima de 24 bits. Y aquí viene la clave: el tiempo inicialmente se expresaba en unidades de décimas de segundo, por lo que debía ser transformado a segundos. Esta operación pasaba necesariamente por multiplicar internamente por 1/10. Es decir, el software medía 35 décimas de segundo, y tenía que transformarlo a 3,5 segundos. Pero... ¿cómo se escribe 1/10 en el sistema binario?
1/24 +1/25 +1/28 +1/29 +1/212+1/213+ ....
Dando como resultado: 0,000110011001001100110011001100... donde tras la coma, las cifras nunca acaban. Como hemos dicho que la precisión máxima de los Patriot era de 24 bits, el número anterior se trunca a:
0,00011001100110011001100, introduciendo un error respecto a la cifra infinita de
0,0000000000000000000000011001100..., lo que equivale aproximadamente a 0,000000095 segundos (en decimal).
Insignificante, ¿verdad? No tanto. Los ordenadores llevaban alrededor de 100 horas funcionando, es decir:100 × 60 × 60 × 10 = 3.600.000 décimas de segundo.
Si en cada décima de segundo se introduce un error de 0,000000095 segundos, el error total es de:
0,000000095 × 3.600.000 = 0,342 segundos.
Dado que un Scud viaja a 1.676 m/s, el desplazamiento adicional del misil en 0,342s fue de unos 573,192 m... Suficiente para escapar de la validación de la posición, y que el misil iraquí impactara en el cuartel y provocara las 28 muertes.
El segundo ejemplo, un poco más amable, se da lugar en un videojuego clásico de 1996. Para los aficionados a este entretenimiento les sonará perfectamente. Se trataba del Quake 1.
Nada tiene que ver el motor gráfico de entonces con las entregas multimedia de ahora.Pero en aquélla época, y aún en la actual, una fórmula muy usada para calcular cuánto salta el muñeco virtual que controlamos, es la típica expresión que muchos enseñamos a nuestros alumnos, y que corresponde a determinar la posición y la velocidad a partir de la aceleración en cada instante de tiempo. Lo cual se conoce como integración numérica de Euler.
•Vel (t+1) = vel (t) + gravedad · dt
•Pos (t+1) = pos (t) + vel (t+1) · dt
Sin embargo, en aquella época, la potencia de los ordenadores caseros era muy dispar, y algunos tenían una mayor frecuencia de trabajo que otros. A mayor frecuencia de trabajo, menor intervalo de tiempo, dt, en la fórmula. Y fijémonos en algo curioso: la integración de Euler no se caracteriza por ser muy precisa, y resulta que la posición alcanzada no es la misma para dt diferentes:
Como consecuencia, ¿qué ocurría? La historia gráfica del juego Quake 1, en un momento dado, presentaba un salto un poco largo a superar. Pero los jugadores, según qué ordenador usaran, podían superarlo o no. El error por defecto que impedía superar el salto venía a ser de unos 3cm. Así de gracioso y de chapucero.
Y como estos, se pueden encontrar muchos más fallos catastróficos
en este link.
En esta época de exámenes, conviene aclarar a nuestros alumnos que la vida profesional a menudo, poco se parece a las condiciones de trabajo que existen en un examen. Y siempre conviene recordar la cita de Henry Petroski que decía que la ingeniería es humana.
Referencias: