Science Limitations
Par Arsène Kanyamibwa
Par Yahia Guergachi - Le 19 février 2015
Lorsque votre ordinateur devient fou
Comment une machine peut-elle commettre une erreur de calcul alors que l’algorithme implémenté est mathématiquement juste ?
Considérons le polynôme de second degré
avec a = 1, b=10000 et c =1.
Si vous essayez d’écrire un programme très simple qui calcule textuellement la racine
le compilateur vous renverra 0 comme résultat. Or en remplaçant x par 0 dans notre polynôme on obtient non pas un résultat nul mais 1 ! L’ordinateur a donc calculé une racine fausse !
Étudions ce phénomène de manière plus fine maintenant en codant la fonction
On reconnaît ici le développement en série de la fonction exponentielle. Plus n est grand, plus f(x) est très proche de exp(x), si bien qu’on devrait avoir une erreur quasi nulle pour n>100.
Or en implémentant la fonction f dans un programme informatique avec n = 2000, on observe des résultats complètement aberrants :
Inutile de vous rappeler que exp(x) décroît vers 0 pour les nombre négatifs !
Une représentation informatique des nombres en cause
Une machine stocke ses informations sous forme de bits (0 ou 1). Une norme, appelée IEEE754, a été créée pour représenter les flottants avec pour objectif de couvrir le maximum de réels en utilisant le moins de mémoire, et donc de bits, possibles.
Cette norme représente ainsi les réels sous forme de “virgule flottante” :
avec M limitée à 23 bits pour une précision simple.
Ainsi on peut remarquer qu’il n’est pas possible de représenter n’importe quel nombre avec cette représentation car cette représentation n’est pas continue ! En effet le premier réel qui vient juste après 1 est 1.0000001 et plus le nombre est grand, plus le premier réel qui lui succédera sera loin ! Cette imprécision pour de grand nombre conduit rapidement à des arrondis de nos machines et peuvent ainsi nous renvoyer des résultats aberrants.Vous pouvez essayer de coder d’autres fonctions comme les fonctions cosinus ou sinus et vous constaterez que des cosinus de grands nombres peuvent carrément être considérés comme infinis (NaN, not a number) !
Soyez donc attentifs lorsque vous êtes amenés à effectuer des calculs sur des grands nombres !
– Explications sur le site de l’école centrale de Lyon
Crédits photos : VirtuallyLight via Flickr.
Toi aussi participe au blog !
ParticiperPar Arsène Kanyamibwa
Par Bourboulou Romain
Par Jeanne Mialet-Perez
Par Damien Dufour