Le 4 juin 1996, le vol inaugural d'Ariane 5 est détruit 37 secondes…
Exercice supplémentaire · niveau 3 (difficile) · NSI (première), chapitre 1 — Représenter les entiers · Quand la taille des mots fait des dégâts
Énoncé
Le 4 juin 1996, le vol inaugural d'Ariane 5 est détruit secondes après le décollage. La cause : une vitesse horizontale, mesurée et stockée en flottant, est convertie vers un entier signé de bits. Quel est le plus grand entier représentable ainsi ? Que vaut la conversion d'une mesure de ? Quelle leçon de spécification en tirer ?
Corrigé
La borne. Sur bits signés, les valeurs vont de à .
La conversion. Une mesure valant ne rentre pas. Réduite modulo puis relue en complément à deux, elle donne : plus_n_bits(32767, 1, 16) rend bien . Une vitesse positive devient une vitesse négative — et rien ne le signale.
Ce qui s'est réellement passé. Le code venait d'Ariane 4, où cette conversion était sûre : la trajectoire d'Ariane 4 ne produisait jamais une valeur aussi grande. La précondition implicite « la vitesse horizontale reste inférieure à » était vraie pour Ariane 4, fausse pour Ariane 5, plus rapide. Elle n'était écrite nulle part.
La leçon. Une précondition non écrite est une précondition non vérifiée. Réemployer un code correct dans un contexte différent, c'est réemployer ses préconditions — et celles-ci ne voyagent pas toutes seules. Le chapitre 3 en fera un geste systématique : écrire la précondition avec la fonction, et l'exprimer par une assertion.
Prolongement : le calcul fautif ne servait même plus à rien après le décollage. Le système avait été conservé « au cas où » — un composant inutile a détruit une fusée.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.