Le site "Les Amis de l'Université" propose à la lecture un certain nombre de conférences, certaines traitent de mathématiques. L'une d'elles, titrée "Les mathématiques aujourd'hui" et donnée par Dominique Tournès (Professeur en mathématiques à l'IUFM Réunion) en juin 1999 a retenu mon attention. Elle retrace à grands traits l'évolution des mathématiques de l'Antiquité au XXème siècle, puis montre, en réponse à un ministre qui ne voulait pas les voir, comment les mathématiques sont omniprésentes dans notre société. Un paragraphe traite du problème des erreurs d'arrondi. L'extrait suivant en est tiré.
Voici deux exemples de désastres causés par une mauvaise gestion des erreurs d'arrondi :
1) Le 25 février 1991, pendant la Guerre du Golfe, une batterie américaine de missiles Patriot, à Dharan (Arabie Saoudite), a échoué dans l'interception d'un missile Scud irakien. Le Scud a frappé un baraquement de l'armée américaine et a tué 28 soldats. La commission d'enquête a conclu à un calcul incorrect du temps de parcours, dû à un problème d'arrondi. Les nombres étaient représentés en virgule fixe sur 24 bits. Le temps était compté par l'horloge interne du système en 1/10 de seconde. Malheureusement, 1/10 n'a pas d'écriture finie dans le système binaire : 1/10 = 0,1 (dans le système décimal) = 0,0001100110011001100110011... (dans le système binaire). L'ordinateur de bord arrondissait 1/10 à 24 chiffres, d'où une petite erreur dans le décompte du temps pour chaque 1/10 de seconde. Au moment de l'attaque, la batterie de missile Patriot était allumée depuis environ 100 heures, ce qui avait entraîné une accumulation des erreurs d'arrondi de 0,34 s. Pendant ce temps, un missile Scud parcourt environ 500 m, ce qui explique que le Patriot soit passé à côté de sa cible.
2) Le 4 juin 1996, une fusée Ariane 5 a explosé 40 secondes après l'allumage. La fusée et son chargement avaient coûté 500 millions de dollars. La commission d'enquête a rendu son rapport au bout de deux semaines. Il s'agissait d'une erreur de programmation dans le système inertiel de référence. À un moment donné, un nombre codé en virgule flottante sur 64 bits (qui représentait la vitesse horizontale de la fusée par rapport à la plate-forme de tir) était converti en un entier sur 16 bits. Malheureusement, le nombre en question était plus grand que 32768, le plus grand entier que l'on peut coder sur 16 bits, et la conversion a été incorrecte.