Les pieges des nombres reels ne sont pas qu'une curiosite de cours. Quand on programme des fusees, des armes, des appareils medicaux ou des sondes spatiales, une seule conversion mal faite peut etre fatale. Voici les cas d'ecole les plus celebres - et le concept exact qui se cachait derriere.
🚀Ariane 5, vol 501
Trente-sept secondes apres le decollage, la fusee bascule, se brise et s'autodetruit. A bord, quatre satellites scientifiques. Pertes : ~370 millions de dollars, partis en fumee en moins d'une minute.
int16) : depassement, exception non geree, arret de l'ordinateur de bord. La fusee, aveugle, est partie en vrille.
🛡️Le missile Patriot
Une batterie antimissile Patriot ne parvient pas a intercepter un missile Scud, qui frappe un baraquement. Bilan : 28 morts et une centaine de blesses.
0,1 n'a pas de representation binaire exacte : a chaque tick, une minuscule erreur. Apres 100 heures de marche continue, l'erreur accumulee atteignait ~0,34 seconde. A la vitesse d'un Scud (~1 676 m/s), cela placait la cible plus d'un demi-kilometre a cote : le radar cherchait au mauvais endroit.
0,1 en boucle (exactement la slide « L'erreur qui s'accumule »), aggrave par un systeme jamais redemarre.☣️Le Therac-25
Cet appareil de radiotherapie a delivre a plusieurs patients des doses de radiation jusqu'a 100 fois trop fortes. Au moins trois personnes en sont mortes, d'autres gravement brulees.
🗽️Mars Climate Orbiter
Apres un voyage de neuf mois, la sonde de la NASA s'approche trop pres de Mars et se desintegre dans l'atmosphere. Cout : ~327 millions de dollars.
🧮Le bug FDIV du Pentium
Le tout nouveau processeur Pentium se trompait sur certaines divisions en virgule flottante : par exemple, une division dont la reponse etait fausse a partir de la 5e decimale. Intel a du rappeler les puces : ~475 millions de dollars.
Le fil rouge
Cinq drames, cinq pieges - tous vus dans le diaporama « Les nombres reels » :
| Catastrophe | Le piege numerique | Le reflexe qui aurait sauve |
|---|---|---|
| Ariane 5 | depassement a la conversion 64 bits → 16 bits | verifier l'intervalle avant de convertir |
| Patriot | accumulation d'erreur sur 0,1 | math.fsum, recalibrer, redemarrer |
| Therac-25 | depassement d'un compteur entier | garde-fous materiels, tests |
| Mars Orbiter | mauvaise unite / format | documenter et verifier le format |
| Pentium | division flottante fausse (materiel) | tester, comparer avec tolerance |
La morale du cours : un nombre, dans une machine, est toujours une approximation rangee dans un format limite. Le savoir - et coder en consequence - n'est pas un detail d'informaticien : c'est parfois une question de vie ou de mort.