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)
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...
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
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.
Qu'est qu'ils foutaient en Irak?
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.
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.
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.
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 ^^'
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.