Calculatrices et erreur de calcul, une réalité à connaître

Aujourd’hui, je découvre un article intéressant du Dr Goulu :  http://www.drgoulu.com/2014/06/29/trop-plein-de-juin-2/#.U7QfhnZy27I  dont un des paragraphes est intitulé «Pourquoi ne pas faire confiance à une calculatrice».

C’est un fait : des calculatrices et des logiciels peuvent produire des résultats erronés !

Mieux vaut toujours vérifier la fiabilité des résultats. Ce détail peut être particulièrement important lorsque les calculatrices sont autorisées pendant l’épreuve de maths lors du Bac ou du Brevet des collèges. Une erreur peut être gênante voire grave si un ingénieur fait trop confiance à sa calculatrice, et dont l’erreur provoque la construction de wagons de train trop larges par rapport à l’entrée des stations de métro… (L’incident s’est réellement produit, mais je n’en connais pas la cause).

iconlol

Voici un calcul effectué avec Wolfram Alpha :

2014-06-29_225820

Il s’agirait ici de la valeur exacte.

  • Cependant, en utilisant la calculatrice de mon PC dans un environnement Linux, le résultat devient −0,864872239. Ce qui est manifestement faux.
  • En utilisant ma calculatrice programmable Casio Graph 25, le résultat affiche «ERROR». En effet, ça ne marche pas en-dessous de 10⁻⁹⁹ ni au-dessus de 10⁹⁹.
  • J’ai conçu un script Perl qui donne ce résultat : Nombre = 1.12794246321782e+77 ; Sinus(nombre) = -0.688782176710222 et ce nombre est différent de celui donné par ma calculette de Linux. Et faux lui aussi.

 

Lorsqu’un nombre X devient de plus en plus petit, en se rapprochant de zéro, alors  sin X tend vers X. Mais le produit pi×(1 + 2)²⁰⁰  est strictement supérieur à 1, et il est même très grand.

Concrètement, ce qu’il faut déclarer, c’est que le résultat dépend de ce que X (qui est un angle) soit exprimé en radians ou en degrés. L’erreur peut venir d’un oubli de conversion de donnée angulaire comme elle peut venir d’un calcul faisant intervenir un très grand nombre.

Nous avons (en radian) : sin 0 = sin pi = sin (2×pi) = 0 ; sin (pi/4) = sin (pi/2) = 1.

Or, quand l’angle est un très grand nombre, avec plusieurs dizaines de chiffres, il arrive que la calculatrice ne tienne pas compte des derniers chiffres, et qu’elle arrondisse le nombre sous sa notation scientifique, sous la forme K×10⁷⁷ où K est un nombre réel avec une quantité réduite de décimales pour simplifier et faciliter l’affichage sur l’écran de la calculatrice. Si les derniers chiffres sont négligés, cela fausse forcément le résultat.

Par exemple, sin (1 000 000 001) ne donnera pas du tout le même résultat que sin (10⁹).

 

À propos d’erreurs mathématiques, j’avais découvert moi-même que les langages Perl et Python engendrent des erreurs quand on cherche des nombres premiers en utilisant l’opérateur modulo. Par exemple, pour un nombre entier K dans un intervalle [2;N – 1], l’opération  N modulo K ($N % $K quand on écrit en langage Perl) engendre un résultat erroné (le reste de la division devient faux) quand N devient grand. Ce bug est corrigé quand j’emploie plutôt la forme N = (K×M) + R où R (le reste) est le résultat à obtenir, et où N et K et M sont des entiers.

Et même si Wolfram Alpha est un outil plaisant, il peut néanmoins engendrer parfois des anomalies dans ses résultats, par exemple à propos des données thermodynamiques sur divers matériaux dont les valeurs peuvent être différentes par rapport à d’autres sources. Wolfram Alpha aussi est à utiliser avec prudence. On n’est jamais sûr de rien, d’où la nécessité de vérifier par divers moyens indépendants.

 

 

© 2014 John Philip C. Manson

 

Advertisements