Erreurs d'unités qui ont coûté de l'argent réel : Mars Climate Orbiter et le vol Gimli

Dernière révision : 2026-07-29

Deux catastrophes, une cause racine

Aucun des deux incidents ci-dessous n'a été causé par un mauvais nombre. Les deux ont été causés par un nombre correct sans unité indiquée, utilisé par quelqu'un qui en a supposé une différente. Cette distinction est importante : un facteur de conversion erroné est une erreur mathématique, facile à détecter en vérifiant l'arithmétique. Une étiquette d'unité manquante ou non concordante passe tous les contrôles arithmétiques, car les nombres multipliés sont tous corrects — le logiciel, la feuille de calcul, le calcul s'exécutent exactement comme écrit. L'erreur réside entièrement dans ce qu'une personne a supposé que le nombre signifiait.

Septembre 1999 : un orbiteur martien arrive 169 kilomètres trop bas

Mars Climate Orbiter a quitté la Terre le 11 décembre 1998, dans le cadre d'un programme de la NASA visant à étudier l'atmosphère et le climat de Mars. Sa trajectoire vers Mars nécessitait de petites corrections de cap en cours de route, et des mises à feu périodiques de ses petits propulseurs d'orientation pour désaturer les roues de réaction du vaisseau spatial — une tâche d'entretien de routine, effectuée environ dix fois par jour pendant les neuf mois et demi de la traversée.

Le logiciel qui modélisait l'effet de chaque mise à feu de propulseur a été écrit par Lockheed Martin Astronautics, le constructeur du vaisseau spatial, et la spécification de l'interface logicielle de la mission exigeait qu'il produise l'impulsion résultante (poussée multipliée par la durée de la mise à feu) en newton-secondes, l'unité du SI. Le logiciel terrestre de Lockheed, un fichier appelé SM_FORCES, a écrit ses résultats en livres-force-secondes, l'équivalent coutumier. Il a écrit ce fichier dans un autre, le fichier AMD, que l'équipe de navigation du JPL a lu comme entrée pour son modèle de trajectoire — et le modèle du JPL a supposé, selon la spécification, que les nombres qu'il lisait étaient déjà en newton-secondes. Une livre-force-seconde équivaut à environ 4,45 newton-secondes, donc chacune de ces mises à feu de propulseur, pendant neuf mois et demi, a été modélisée comme étant environ 4,45 fois plus faible que l'impulsion réelle que le vaisseau spatial avait réellement reçue. Personne ne l'a détecté, car les deux côtés de l'échange étaient intérieurement cohérents : les nombres de Lockheed étaient des livres-force-secondes corrects, le modèle du JPL traitait correctement tous les nombres qui arrivaient en tant que newton-secondes. Le format de fichier n'avait pas de champ d'unité.

Le vaisseau spatial était ciblé pour passer 226 km au-dessus de la surface martienne lors de l'insertion en orbite — assez proche pour que la mise à feu fonctionne, assez loin pour rester au-dessus de l'atmosphère. Environ 24 heures avant l'arrivée, les données de suivi mises à jour (toujours basées sur le même modèle de trajectoire non corrigé) prédisaient une altitude plus proche de 110 km, terriblement basse mais toujours, selon la compréhension de l'équipe à l'époque, au-dessus de l'altitude d'environ 80–90 km à laquelle les forces atmosphériques deviendraient dangereuses. La reconstruction de la Commission d'enquête sur les sinistres, en utilisant la dernière télémétrie réellement reçue, situait l'altitude réelle plus proche de 57 km — assez bas pour que le chauffage atmosphérique et la traînée aient probablement détruit le vaisseau spatial ou l'aient mis sur une trajectoire d'échappement hors de l'orbite de Mars. Le contact a été perdu à 09:04:52 UTC le 23 septembre 1999, alors que l'orbiteur passait derrière Mars pour la mise à feu d'insertion ; il n'a jamais réapparu. Le rapport Phase I de la Commission, publié le 10 novembre 1999, a nommé la cause racine clairement : le logiciel d'une équipe a produit des unités anglaises là où la spécification de l'interface exigeait des unités métriques, et aucune étape de vérification dans le processus de modélisation des trajectoires ne vérifiait les unités physiques des données qu'il consommait, seulement sa plausibilité numérique.

Le vaisseau spatial lui-même est généralement signalé comme une perte de 125 millions de dollars — un chiffre qui ne doit pas être confondu avec le coût total du programme Mars Surveyor '98 de 327,6 millions de dollars, qui a également financé le Mars Polar Lander distinct (perdu dans un accident différent, sans rapport, trois mois plus tard). Le chiffre spécifique à l'orbiteur est celui à citer pour cet incident.

Juillet 1983 : une valeur de densité survit avec la mauvaise unité

Le vol Air Canada 143, un Boeing 767 en route de Montréal vers Edmonton le 23 juillet 1983, a manqué de carburant à 41 000 pieds au-dessus du lac Red Lake, en Ontario, et a plané jusqu'à un atterrissage d'urgence sur une piste de base aérienne désaffectée à Gimli, au Manitoba — avec 69 personnes à bord et, remarquablement, sans décès. La cause immédiate était une jauge de quantité de carburant cassée ; la raison pour laquelle l'équipage a procédé au départ malgré tout, ayant calculé manuellement la charge de carburant, est l'histoire des unités.

Ce 767 était l'un des premiers avions d'Air Canada à fonctionner dans les unités métriques que l'industrie de l'aviation canadienne venait d'adopter — carburant en kilogrammes et litres, pas les livres et gallons que la flotte plus ancienne de la compagnie aérienne et ses équipes au sol avaient utilisées pendant des décennies. Avec la jauge inopérante, l'équipe au sol a mesuré le carburant déjà dans les réservoirs à la tube de jaugeage, une mesure mécanique, et a converti cette lecture en un volume de 7 682 litres. Pour déterminer la quantité de carburant supplémentaire à ajouter, ils avaient besoin de la masse du carburant déjà à bord, et ont utilisé un facteur de conversion de 1,77 pour convertir les litres en masse — un chiffre réel et correct pour la densité du carburant Jet A-1, mais correct uniquement en tant que 1,77 livre par litre. Croyant travailler en kilogrammes par litre, comme le reste du processus de ravitaillement l'exigeait maintenant, l'équipage et l'entrepreneur en ravitaillement ont traité 1,77 comme s'il s'agissait de 1,77 kilogrammes par litre, un nombre environ 2,2 fois trop élevé.

Le vol nécessitait 22 300 kg de carburant au total. En utilisant la mauvaise densité, 7 682 L ont été calculés comme contenant déjà 13 597 « kilogrammes » (en fait des livres), laissant 8 703 « kilogrammes » toujours nécessaires — reconvertis en un volume en utilisant le même mauvais facteur, 4 917 L, ce qui a été réellement pompé à bord. Les réservoirs contenaient 12 599 L de carburant réel lorsque l'avion a décollé, pesant environ 10 100 kg à la vraie densité de 0,803 kg/L : pas assez pour atteindre Edmonton.

Dérivation travaillée : pourquoi le manque n'était pas aléatoire

L'arithmétique derrière l'erreur de ravitaillement de Gimli possède une propriété frappante une fois écrite algébriquement. Soit V₁ le carburant correctement jaugé déjà à bord (7 682 L, jamais en question), ρ la vraie densité (0,803 kg/L) et k le rapport livres-kilogrammes (≈2,20462, puisque le mauvais facteur 1,77 lb/L égale ρ × k). L'équipage a calculé :

Volume supplémentaire à charger, V₂ = [22 300 − V₁×ρ×k] ÷ (ρ×k)

Volume total chargé, V₁+V₂ = 22 300 ÷ (ρ×k)

V₁ s'annule complètement. La lecture correcte de la jauge de mesure n'avait jamais d'importance pour le total final — le facteur de densité défectueux seul l'a déterminé. Masse réelle chargée = (V₁+V₂) × ρ = 22 300 ÷ k = 22 300 ÷ 2,20462 ≈ 10 113 kg. Reconvertissez cela en livres et cela vient à presque exactement 22 300 lb — l'objectif de kilogramme de l'équipage, livré en livres à la place. Ce n'est pas une coïncidence : chaque fois qu'un seul facteur de conversion d'unité erroné est appliqué de manière cohérente des deux côtés d'un calcul « ce que j'ai, ce que j'ai encore besoin », le résultat arrive au nombre cible d'origine, juste mesuré dans l'autre unité. L'avion portait le nombre 22 300 — l'équipage n'a simplement jamais appris à quelle unité il était attaché jusqu'à ce que les moteurs s'éteignent.

Le capitaine Bob Pearson, un pilote de planeur expérimenté en dehors de son travail quotidien, a utilisé une manœuvre de glissade avant — croiser les commandes pour augmenter la traînée sans gagner de vitesse — pour perdre de l'altitude en approche finale et atterrir le 767 sans moteur en toute sécurité. Dix personnes ont subi des blessures mineures lors de l'évacuation ; personne n'est décédé. L'examen interne d'Air Canada et le Aviation Safety Board de l'époque (prédécesseur du Transportation Safety Board of Canada actuel) ont tous deux pointé vers le même échec sous-jacent que Mars Climate Orbiter dix-six ans plus tard : un nombre correct, et un processus sans vérification pour déterminer à quelle unité il appartenait.

Ce que les deux incidents partagent

Mars Climate OrbiterVol Gimli
Mauvaise unitéLivres-force-secondes lues comme newton-secondesLivres par litre lues comme kilogrammes par litre
Taille du décalage×4,45×2,20
Où c'était cachéUn format de fichier sans champ d'unité, vérifié deux fois par deux équipes différentes qui supposaient chacune que l'autre utilisait l'unité spécifiéeUne seule valeur de densité, correcte pour un système d'unités, appliquée dans un processus nouvellement métrique sans re-dérivation
Ce qui l'a capturéLa trajectoire du vaisseau spatial lui-même, trop tardLes moteurs, en vol, avec assez d'altitude pour planer
RésultatPerte totale, aucun blessé (sans équipage)Avion réparé et remis en service ; aucun décès

Aucun des deux échecs n'avait besoin d'un mauvais nombre. Les deux avaient besoin d'un nombre dont personne n'a re-vérifié l'étiquette, exactement au point où deux conventions d'unités différentes se sont rencontrées.

Voir aussi : Méthodologie et Politique éditoriale -- comment les facteurs de conversion de ce site sont sourcés et révisés.