Dans l'histoire des bogues informatiques, un exemple célèbre concerne le vol 501 de la fusée Ariane 5 en 1996. Un dépassement de capacité (une variable de 8 bits devant accueillir un nombre en nécessitant 9) causa une défaillance du système, ce qui entraîna carrément l'explosion de la fusée.
Tous les commentaires (72)
En gros la trajectoire prise par Ariane 5 était beaucoup plus courbée que celle d Ariane 4.
Donc l ordinateur de bord a très vite atteint ça capacité maximal, et pour simplifier le problème l ordinateur a crut que la fusée avait un angle de 25% hors de la trajectoire donc il a tout de suite redressé le "tir" et à cause de la vitesse Ariane 5 se brise en deux et dans la seconde qui a suivit le système d auto destruction c est enclenché !
Imaginer le silence dans la salle d observation ...
D'après mon professeur d'électronique, ce 9 ème bit était le bit de signe, pour savoir si la valeur est positive ou négative. Les deux équipes d'ingénieurs chargés des modules ont pris des conventions différentes. Il parlait de la correction de l'angle de la navette. A vérifier. .
A noter qd même qu'Ariane 5, depuis ce seul echec est le lanceur le plus fiable du monde que ce soit en terme d'echec (1 seul) ou de précision de positionnement des satellites ( ce qui augmente la durée de vie du satellite). Les autres sont loin derrière, et certains n'ont pas de mécanisme d'auto-destruction (les russes notament.. Planquez vous ça revient)
8 bits peuvent stocker 2^8 = 256 valeurs
Donc soit de -128 a 127 ou de 0 a 255 ça dépend si la variable est unsigned ou pas.
Erreur classique de stocker une valeur trop grande qu'on appelle un integer overflow ; une valeur erronée va être stockée et ca peut entrainer d'autres erreur si cette variable est utilisée pour allouer ou remplir de la memoire, comme un buffer overflow
Boom :)
La prochaine fois qu'on me dit que mon code est pas correct parce que j'ai pas mis le bon type de variable, je pourrai répondre "mais moi je détruis aucune fusée donc ça va!"
Ok cet anecdote rentre dans mon domaine, je vais y apporter juste un correctif et plus de précision, faut savoir quand un programme marche il est rarement modifié, donc le programme qui gère la trajectoire de la fusée Ariane 5 était le même que celui de Ariane 4 sauf que la 5 était beaucoup plus rapide et devait se représenter sur 9 bits. Vu que le programme en utilisé que 8 le 9e que la fusée a utilisé était celui du correctif de trajectoire ce qui a fait zigzaguer la fusée . Voyant que la fusée allait retomber au sol ils ont activer l'autodestruction. Désolé pour les fautes je suis pas bien réveillé.
Comme dit plus haut, le calcul était réalisé en 8 bits (2^8=256), le dépassement de capacité s'est matérialisé par une valeur A erronée : A modulo 256 (reste de division entière : 255%256=255 ; 256%256 = 0 ; 257%256 = 1 ; etc.) Le bug n'a pas "planté", au sens informatique, le programme qui a par ailleurs continué à s'exécuter avec des valeurs fausses. Il est alors facile de comprendre pourquoi le comportement de la fusée n'était pas celui attendu..
J'avais assisté à la retransmission en direct de cette événement. Quelle tristesse quand la fusée avait commencé à dévier de sa trajectoire pour finalement exploser.
Ariane 5 avait très mal commencé sa carrière. Depuis heureusement, elle a su montrer sa grande performance et est aujourd'hui l'un des plus gros lanceurs au monde d'équipement pour l'espace.
A quand Ariane 6 ? :-)
Le problème à l'époque était rarement la taille des chiffres qu'on pouvait stocker, mais plutôt la taille globale des mémoires qui était ridicules (quelques centaines d'octets, voire kilo octets au mieux).
Les valeurs vont de 0 à 255, soit 00 FF en hexadécimal.
Mais effectivement il y a 256 valeurs possible.
Amicalement.
Plus tard, M. Feynman a démontré que les joints o-ring étaient beaucoup moins élastiques par basses températures, ce qui causa une fuite de carburant, puis boom.
Tout se traduit, même le vocabulaire technique!