Les nombres dans la machine

Catastrophes numeriques

Cinq histoires vraies ou un nombre mal range - un depassement, une erreur d'arrondi, un mauvais format - a coute des fusees, des centaines de millions, et des vies. Chacune renvoie a un piege du diaporama.

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.

4 juin 1996 · Kourou, Guyane · aerospatiale

🚀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.

La cause technique Le systeme de navigation, repris tel quel d'Ariane 4, convertissait une vitesse horizontale rangee en flottant 64 bits vers un entier signe 16 bits. Ariane 5, bien plus rapide, a produit une valeur depassant 32 767 (le maximum d'un int16) : depassement, exception non geree, arret de l'ordinateur de bord. La fusee, aveugle, est partie en vrille.
→ Le piege de l'intervalle de validite : convertir un nombre vers un format trop petit, et reutiliser un code hors de son domaine prevu. (Slide « L'intervalle de validite ».)

25 fevrier 1991 · Dhahran, Arabie saoudite · militaire

🛡️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.

La cause technique L'horloge interne comptait le temps par dixiemes de seconde, ranges en flottant. Or 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.
→ Le piege de l'accumulation d'erreurs sur 0,1 en boucle (exactement la slide « L'erreur qui s'accumule »), aggrave par un systeme jamais redemarre.

1985-1987 · Etats-Unis et Canada · medical

☣️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.

La cause technique Plusieurs bugs combines, dont un depassement d'entier : une variable de controle sur 1 octet (0 a 255) repassait a zero a chaque 256e incrementation. Si l'operateur agissait pile a ce moment, une verification de securite etait sautee et le faisceau passait en pleine puissance. S'ajoutaient des conditions de course et l'absence de verrous materiels.
→ Le piege du depassement d'entier (un compteur qui « boucle » a zero) - et la regle d'or : ne jamais confier la securite au seul logiciel.

23 septembre 1999 · orbite de Mars · spatial

🗽️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.

La cause technique Deux equipes, deux unites. Un logiciel fournissait la poussee en livres-force (unites imperiales) ; l'autre la lisait comme des newtons (unites SI). Aucune conversion entre les deux. Les nombres etaient « justes »... mais pas dans la meme unite. La trajectoire calculee etait completement faussee.
→ Le piege du format de donnees : un nombre sans son unite (ou son ordre, ou son type) n'a pas de sens. Toujours documenter et verifier le format aux frontieres entre programmes.

1994 · Intel · materiel

🧮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.

La cause technique Une table de division gravee dans le silicium etait incomplete : quelques cases manquantes suffisaient a fausser certains calculs. Preuve que meme le materiel qui execute l'arithmetique flottante peut se tromper - et que rien ne remplace les tests.
→ Meme le calcul flottant « cable » n'est pas sacre. D'ou les reflexes du diaporama : se mefier, comparer avec une tolerance, verifier.

Le fil rouge

Cinq drames, cinq pieges - tous vus dans le diaporama « Les nombres reels » :

CatastropheLe piege numeriqueLe reflexe qui aurait sauve
Ariane 5depassement a la conversion 64 bits → 16 bitsverifier l'intervalle avant de convertir
Patriotaccumulation d'erreur sur 0,1math.fsum, recalibrer, redemarrer
Therac-25depassement d'un compteur entiergarde-fous materiels, tests
Mars Orbitermauvaise unite / formatdocumenter et verifier le format
Pentiumdivision 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.