Une erreur d'arrondis payée par des vies humaines

Proposé par
le

Les erreurs d'arrondis en informatique peuvent causer des drames. En 1991, 28 soldats américains furent tués à cause d'un problème de ce type durant la guerre du Golfe : un système antimissile américain échoua à intercepter un missile irakien du fait d'une accumulation d'erreurs d'arrondis conduisant à un décalage de 0,34 seconde sur le calcul de la trajectoire du missile. Peu de temps, mais suffisamment pour que l'anti-missile rate sa cible de 500 mètres.


Tous les commentaires (57)

Ce qu'il y a de bien c'est que l'humain à des mots pour tout ses erreurs: dommage collatéral ou le célèbres tire amies

Posté le

android

(0)

Répondre

a écrit : Les sources ne disent pas que l'antimissile est passé à 500 mètres, seulement qu'un missile fait 500 mètres en 0,34s. Bref très différent quand même !! C'est exactement la même chose. Si ton missile est partir 0.34s trop tard (ou trop tot) et qu'il fait 500m dans ce laps de temps, alors il ratera l'interception de 500m.

Posté le

android

(0)

Répondre

Commentaire supprimé On parle ici de prise de risques sur un système permettant de sauver des vies. Même avec 95% de risque d'échec, les 5% restant sont bons à prendre.

Les docteurs ne sont pas des serials Killers !

a écrit : Je suis peut etre idiot. Mais j'arrive pas à comprendre le fait que 1/10 ne puisse pas être 0.1 exactement en binaire. ... Je comprends pas comment ca ne peut pas etre une valeur finie. Ce n'est pas forcément évident à comprendre, je vais essayer de faire simple :

Un nombre binaire (base 2) est composé de 0 et de 1 (appelé un bit).
Un nombre binaire est composé d'octets (une suite de 8bits). Donc 3 octets = 24bits.
Pour convertir en décimale (base 10), la position des 1 dans le nombre binaire représente une puissance de 2.

Par exemple 00001001 = 2^3 + 2^0 = 8 + 1 = 9

Pour les nombres à virgule, c'est un peu le même principe, les puissances de 2 devenant négatives (donc des divisions par des puissances de 2).

Essayons simplement pour 0.1 :
2^-1 = 1/2 = 0.5 (trop grand)
2^-2 = 1/4 = 0.25 (trop grand)
2^-3 = 1/8 = 0.125 (trop grand)
2^-4 = 1/16 = 0.0625 (trop petit !)

Il faut donc utiliser d'autres bits pour compléter jusque 0.1.
Soit :
2^-4 + 2^-5 = 0.09375

Peut mieux faire :
2^-4 + 2^-5 + 2^-6 = 0,109375
Trop grand !

On essaye donc
2^-4 + 2^-5 + 2^-7 = 0,1015625
Trop grand ...

on continue
2^-4 + 2^-5 + 2^-8 = 0,09765625
On s'approche, mais il y a une erreur.

Avec ce système on peut continuer très longtemps, on n'arrivera jamais à 0.1

Soit sur 24bits :
0.0001100110011001100110011001100 avec une erreur de 0.000000095 sur la conversion décimale

Cette erreur humaine a été avancée au départ, plus tard on s'est aperçu que les missiles patriotes n'ont jamais fait explosé un autre missile en vol... Israël en a été doté, mais ils ont été inefficaces la aussi.
Au vu des résultats et de l'argent investi, les militaires ont été sommé de s'expliquer, effectivement ils ont toujours dit que les patriotes "interceptent" bien les missiles... C'est a dire les croisent de très près, mais jamais ils n'ont dit que les missiles "neutralisaient" c'est a dire détruisent ces missiles, le problème technique étaient que les patriotes explosaient trop tard... Bref des pertes humaines et beaucoup d'argent pour un problème de mot...

Comme précisé précédemment, l'"erreur" de calcul n'est pas dû à une arrondie volontaire des physiciens, mais plutôt à un défaut du codage des nombre et donc des calculs en informatiques. En effet, comme expliqué plus haut, le décompte en binaire (puissances de 2) est plus pratique en informatique/physique car il peut être chiffré par une succession de 1 et de 0 (représenté par des creux ou des non-creux sur nos cd/blue-ray par exemple). Mais en ce qui concerne les nombres réels (tels que pi, e, etc...) intervenant dans les calculs de trajectoire (de surcroit très souvent en complexe) le binaire n'est pas la meilleure manière d'aborder le sujet. Les erreurs sont pourtant estimables et appréhendables par les mathématiciens, et dans le cas contraires peuvent être carrément grossières. Avec un simple calcul tel que 3*0.1-0.3 le logiciel Python (utile à la programmation de quelques fonctions mathématiques) ne renvoie pas 0!

a écrit : Il y a une chose que je ne comprend pas. Il semble évident qu'un calcule imprécis ait des conséquences gigantesques pour les manoeuvres spatiales par exemple. Or il s'agit d'un manque de précision dans le calcule. Quand on arrondit, il me semble qu'on simplifie volontairement le résultat en le rendant légèrement moins précis. Par exemple 1,09 -> 1,1. Alors quel intérêt d'arrondir en sachant les conséquence? Pourquoi ne gardaient-ils pas le résultat brute? Afficher tout Tout simplement parce que les calculs sont fait par une machine, qui ne peut stocker qu'un nombre (tres elevé) mais limité de decimales. dans certains cas, ces erreurs, bien que minimes au depart, deviennent significative

Posté le

windowsphone

(0)

Répondre

a écrit : Je suis peut etre idiot. Mais j'arrive pas à comprendre le fait que 1/10 ne puisse pas être 0.1 exactement en binaire. ... Je comprends pas comment ca ne peut pas etre une valeur finie. le fait de pouvoir écrire ou non un rationnel (soit un nombre de type x/y par exemple 1/2 ou 32/7) en un nombre a virgule dépend seulement de la base utilisée : en base 10, écrire 1/10 est très simple : 0.1. Par contre, on ne peut pas écrire 1/3 (0.33333...)

Ben en binaire c'est pareil, 1/2 s'écrit 0.1, 1/4 s'écrit 0.01... mais on ne peut pas écrire 1/3 ou 1/10 en un nombre fini de décimale (enfin la, ça serait plutôt des binairales ^_^).

Et en base 3, on peut très bien écrire 1/3 : 0.1 ; mais pas 1/10 : 0.0022... etc


(y'a sûrement des erreurs dans mon commentaire, mais si je le souviens bien c'est ca^^)

Posté le

android

(1)

Répondre

a écrit : Il y a une chose que je ne comprend pas. Il semble évident qu'un calcule imprécis ait des conséquences gigantesques pour les manoeuvres spatiales par exemple. Or il s'agit d'un manque de précision dans le calcule. Quand on arrondit, il me semble qu'on simplifie volontairement le résultat en le rendant légèrement moins précis. Par exemple 1,09 -> 1,1. Alors quel intérêt d'arrondir en sachant les conséquence? Pourquoi ne gardaient-ils pas le résultat brute? Afficher tout Je vais te repondre, la mémoire tous simplement, ton processeur 64bit ne peut faire que la double précision, quand il y a trop de virgule, ton processeur le tronque. Je ne sais plus pour la double precision mais pour le simple (32 bit) c'est un bit pout le signe (le plus ou le moins n'est pas representer par un + ou un -) 8 pour l'exposant et le reste donc 23 pour la mantisse (nombre après la virgule). Pour les système militaires ou scientifique, ils ont des processeurs bien plus sophistiqué pour les calculs scientifique que les notres, c'est comme un calcul bidon pour nous humain, l'ordi a une valeur approximatif en simple précision, tellement longtemps que je n'en ai pas fait, je ne saurais dire quelle nombre a virgule est-ce. Je te laisse chercher ce qu'est la virgule flottante en informatique.

Source : Mon ancien BTS IG.

Pour répondre à ta question edb25, il faut savoir que les calculs de ce genre ne sont presque jamais des nombres finis, il y a alors une montagne de calcul d'incertitude ( bisous à tout ceux qui ont fait de la métro ) qui peuvent expliquer cela : même un arrondi au 8ème chiffre après la virgule peut déjà constituer une erreur. C'est verifiable de nos jours juste avec votre gps : un décalage d'une seconde et le gps vous localise à plus de 1km de votre position donc ça ne m'étonne pas pour ce resultat qui doit tenir compte du déplacement du missile.

Posté le

android

(0)

Répondre

Drame de mes fesses! Au début je pensais que c'était des calculs qui on fait qu'un ordi ait mal calculer des trucs ce qui a produit une défaillance et qui a surchauffé la tour et qui a brûler ma maison... Et qui a fait des morts
Mais là on parle de gens partis pour tuer! Et ajoudhuis on trouve dommage qu'ils soient morts, mais c'est la guerre, et en face ça m'étonnerait qu'ils aient les mêmes armes...

a écrit : Ce n'est pas forcément évident à comprendre, je vais essayer de faire simple :

Un nombre binaire (base 2) est composé de 0 et de 1 (appelé un bit).
Un nombre binaire est composé d'octets (une suite de 8bits). Donc 3 octets = 24bits.
Pour convertir en décimale (base 10), la position de
s 1 dans le nombre binaire représente une puissance de 2.

Par exemple 00001001 = 2^3 + 2^0 = 8 + 1 = 9

Pour les nombres à virgule, c'est un peu le même principe, les puissances de 2 devenant négatives (donc des divisions par des puissances de 2).

Essayons simplement pour 0.1 :
2^-1 = 1/2 = 0.5 (trop grand)
2^-2 = 1/4 = 0.25 (trop grand)
2^-3 = 1/8 = 0.125 (trop grand)
2^-4 = 1/16 = 0.0625 (trop petit !)

Il faut donc utiliser d'autres bits pour compléter jusque 0.1.
Soit :
2^-4 + 2^-5 = 0.09375

Peut mieux faire :
2^-4 + 2^-5 + 2^-6 = 0,109375
Trop grand !

On essaye donc
2^-4 + 2^-5 + 2^-7 = 0,1015625
Trop grand ...

on continue
2^-4 + 2^-5 + 2^-8 = 0,09765625
On s'approche, mais il y a une erreur.

Avec ce système on peut continuer très longtemps, on n'arrivera jamais à 0.1

Soit sur 24bits :
0.0001100110011001100110011001100 avec une erreur de 0.000000095 sur la conversion décimale
Afficher tout
Ouah merci. Vraiment tres clair. Pour le coup là tu me feras coucher vraiment moins bête ^^

Posté le

android

(1)

Répondre

a écrit : En informatique, il y a deux façons de caractériser un chiffre : int et float. Les premiers sont des entiers relatifs (...,-3,-2,-1,0,1,2...) et ont une précision infinie, cad 1+1+4=6 pile poil. Les seconds sont des décimaux, pas très précis puisque par exemple 1/2 n'existe pas, ce n'est pas 0,5 mais 0,500000... Au final, la précision sur les float et de 5.5511151231257827e-017. Ainsi 0,1+0,5+0,4≠0. Afficher tout Je suis d'accord 0,1+0,5+0,4 =/= 0 puisque 0,1+0,5+0,4 = 1 ;)
Je charrie mais c'est effectivement une bonne explication, l'ordinateur ne verra pas "1" mais une valeur très proche.

a écrit : C'est étonnant qu'un système supposé être quand même assez fiable, disons, puisse faire autant d'arrondis pour un calcul nécessitant une telle précision.

Ça me fait un peu penser à la coopération entre les états-unis et je ne sais plus qui pour une mission spatiale sur mars, il me semble. <
br /> Il y avait eu confusion entre les mesures faites dans le système métrique et impériale, ce qui a causé le crash de l'engin à piloter. Afficher tout
Ah oui car un des ingénieur avait mesuré un angle avec une technique qui ne marchait qu'avec la Terre et donc une grosse erreur pour un aterrissage marsien

Posté le

android

(0)

Répondre

a écrit : En 91 ils savaient déjà utiliser des systèmes informatiques aussi poussé pour les missiles d'interception ?! Faut que j'arrête de confondre progrès militaire et progrès "public" ... Vraiment intéressant, merci pour l'anecdote. Au niveau militaire, les "portables" existent depuis les années 50

Posté le

android

(0)

Répondre

c'est pareil pour la NASA (et autres) qui envoient des fusées, satellite, etc.. dans l'espace, tout est calculé au 1/100000 de nanomètre près par des super-ordinateurs, on ne peut pas se permettre de faire des arrondis sinon c'est le désastre, surtout à l'échelle du système solaire ^^

Moi ça me rappelle le naufrage du Sheffield qui coula parce qu'un autre navire ciblé par un exocet activa sa protection électronique. Du coup, l'exocet cibla le Sheffield qui au même moment avait abaissé sa protection électronique afin de communiquer par radio.

Posté le

android

(0)

Répondre