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)

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 En l'occurrence, 0.5 possède une représentation exacte, mais effectivement 0.4 et 0.1 n'ont pas de valeur exacte.

Pour s'en convaincre : www.h-schmidt.net/FloatConverter/IEEE754.html
Tapez un chiffre quelconque dans la zone "Decimal Representation", puis appuyez sur "Entrée". La valeur "vue" par l'ordinateur sera dans la zone "After casting to double precision"

Il existe des moyens pour obtenir des précisions "parfaites" sur les flottants en informatique, ou pour être plus précis avec une précision connue à l'avance et quantifiable. Elles sont cependant coûteuses en temps machine, et il est rarissime de trouver des coprocesseurs capables d'accélérer ce type de calculs.

On peut citer notamment les calculs en virgule fixe sur représentation décimale "longue" (souvent plusieurs centaines de chiffres), l'utilisation de rationnels pendant les étapes intermédiaires, les flottants sur N bits (N>=512, la "norme" sur les machines actuelles étant 32 (floats) ou 64 (doubles)), etc.

Inversement, il existe aussi des techniques permettant, au prix d'une perte de précision, d'accélérer très très fortement les calculs sur les flottants, en utilisant notamment des nombres en virgule fixe et des algorithmes de remplacement pour les opérations mathématiques de type racine carrée, cosinus/sinus, etc.

Un exemple très connu est le jeu "Doom", dont la partie 3D (purement logicielle à l'époque) utilisait ce genre de technique pour compenser la faible puissance des ordinateurs de l'époque.

Ca me fait penser aux anglais pendant la guerre des Malouines. Ils avaient "oublié" qu'ils étaient dans hémisphère sud, et n'avait pas change leur programme de lancement de missiles, qui corrige la force de Coriolis. Or, la force de Coriolis dans l’hémisphère Sud est opposée a celle dans l’hémisphère Nord. Ils doublaient donc l'erreur au lieu de l'annuler et envoyaient tous leurs missiles a l'est des bateaux...

a écrit : Ils ont simplifié car il n'avait sûrement pas le choix. Un ordinateur a un nombre maximal de chiffres, au bout d'une dizaine de calcul, voir plus, même en arrondissant très peu, ce sera énormément changer Surtout qu'en 1991 les ordinateurs n'avaient pas les capacités de maintenant. Ils ont dû essayé de trouver le juste équilibre entre la précision et le temps de réaction.

Posté le

android

(4)

Répondre

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
Se que tu parle est pour un avion je crois, qui a manquer de carburant.

Mais pour se qui est des arrondissement, il faut savoir que pour être précis, il faut du temps, du temps nécessaire pour intercepter le missile dans ce cas si, donc il faut faire un compromis entre la précision des cas-ci les et le temps que tu veut mettre à les calculées. On peut etre très précis, mais le temps va manquer. J'espère vous avoir éclaircis

Posté le

android

(0)

Répondre

De même, ce genre de décalage devient très vite catastrophique avec le système GPS.

Un décalage dans la synchronisation de seulement 0,3 microsecondes, et le décalage est de 100 mètres sur la localisation.

a écrit : De même, ce genre de décalage devient très vite catastrophique avec le système GPS.

Un décalage dans la synchronisation de seulement 0,3 microsecondes, et le décalage est de 100 mètres sur la localisation.
Ouais car il ne faut pas oublier qu'il a l'effet relativiste dans les calculs des gps

Posté le

android

(2)

Répondre

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
anne-Omin, ce n'était pas un pays mais l'Union européenne avec qui les États-Unis coopéraient. Les États-Unis sont d'ailleurs, avec l'Ouganda et la Corée du Nord, si je me trompe pas, les seuls à ne pas reconnaître le système de mesures internationales.

Je tiens a préciser, compte tenu de l'anecdote, qu'ici les secondes ne sont pas un temps mais un angle, par exemple , dans un degré il y a 60 secondes, donc une erreur de 0,34 seconde correspond a un angle tres petit (en degré), mais sur longue distance il y a de quoi taper largement a côté de sa cible.

Posté le

android

(19)

Répondre

a écrit : Surtout qu'en 1991 les ordinateurs n'avaient pas les capacités de maintenant. Ils ont dû essayé de trouver le juste équilibre entre la précision et le temps de réaction. Heu... Côté précision, si, c'était quasiment pareil en 1991.

En 1991, le processeur Intel 80386 (premier processeur de PC réellement 32 bits) battait son plein, avec son coprocesseur mathématique qui avait (peu ou prou) la même précision que ceux de maintenant. La différence fondamentale est sur la rapidité d'exécution : un PC moderne est (au moins !!) 200 fois plus puissant (=rapide) qu'un 386 de l'époque. Mais la précision des calculs était quasiment identique à celle atteinte par un PC actuel.

Et en dehors du monde Intel, les Motorola 680x0 permettaient également d'avoir accès au monde 32 bits et aux flottants via le coprocesseur 68881.

Les progrès en matière de calcul ont plus été faits sur la vitesse d'exécution et les calculs en parallèle (unités SIMD, comme les registres SSE/MMX) que sur la précision.

a écrit : Je tiens a préciser, compte tenu de l'anecdote, qu'ici les secondes ne sont pas un temps mais un angle, par exemple , dans un degré il y a 60 secondes, donc une erreur de 0,34 seconde correspond a un angle tres petit (en degré), mais sur longue distance il y a de quoi taper largement a côté de sa cible. Eh bien, si, il fallait vérifier les sources. Il est question d'une conversion d'unité de temps (qui était égal à un dixième de seconde) et non de secondes d'arc (et puis si c'était des secondes d'arc, je pense que ça aurait déjà été signalé comme erreur.)

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
C'est une sonde qui devait se poser sur mars. Lors de l'entré dans l'atmosphère marsiène, un tuyau a lacher se qui a provoquer le crache de la sonde. Les scientifiques ont dit qu'il ne l'avais pas compter dans leur calcule et que c'est un tuyau a 15$ qui a fait cracher un engin a plusieur Million.

Posté le

android

(1)

Répondre

Mon prof de maths au collège utilisé cette anecdote pour nous dire de ne jamais donner un arrondi trop rapidement ou le résultat sera trop loin de la vérité...

Il s'agit du fameux système anti-missile Patriot.
Après avoir découvert ce défaut de calcul, et avant de trouver la solution, les systèmes de calcul devait être remis a zéro régulièrement.
Le système a été mis a jour depuis.

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
C'etait pas apolo? Il y a une fusée que s'est desintegré en passant la couche d'ozone, car les ingenieurs avaient confondu pouce et cm... (si je me souviens bien, et ca c'est pas sur ^^")

Posté le

android

(0)

Répondre

Et c'est aussi dans ces cas là que servent les incertitudes, et plus généralement la métrologie!

Pour en revenir à l'anecdote et à l'explication de l'erreur fournie dans une source :
En fait le système était cadencé par une horloge interne permettant une mesure du temps en dizaines de secondes. Afin de travailler en secondes, cette valeur était donc multipliée par 1/10.
Or 1/10 en valeur binaire n'a pas de représentation finie, celle-ci a donc été représentée sur 24bits. L'erreur résultante de cette troncature est de 0.000000095 pour 10 secondes, soit un décalage de 0.00000095 secondes par seconde.

Le système étant démarré depuis 100 heures, l'erreur s'est accumulée : 0.0000000095*100*60*60=0.34 secondes.

Dans le doute ... reboot !

D'ailleurs il y a un charmant Monsieur répondant au doux nom de Siegfried Rump, qui s'est "amusé" à montrer ça en résolvant une équation "à la main" et à la machine et qui a montré la flagrante différence entre les deux résultats.
Superbe équation qui donne : y = 333.75 b^6 + a²(11 a² b² - b^6 - 121 b^4 - 2) + 5.5 b^8 + a/(2b)
avec a = 77617 et b = 33096.... (genre normal l'équation).
Bref. Aimons la technologie :).

Les soldats sont morts à cause du système anti missile ? Ouf, j'ai cru que c'était à cause du missile irakien ^^'

Posté le

android

(5)

Répondre

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.

Posté le

android

(0)

Répondre