Accumulation des erreurs d'arrondi
niveau TerS
» voir aussi... » Numération binaire, codage et arrondis , aspect mathématique de l'arrondi |
Le but de cette étude est de montrer l'effet (très) néfaste des erreurs d'arrondi d'un ordinateur dans le calcul d'une intégrale somme toute relativement banale.
i Cette illustration des dangers de l'informatique dont les victimes sont d'innocents élèves de Terminale trahis par leur calculatrice, s'appuie sur l'excellent exemple de Jacques Hervé Saïac dans L'informatique appliquée au calcul scientifique, page 140, Ed. Dunod, Paris-1989.
Pour tout n de N, on considère les intégrales sur l'intervalle [1,e]:
c/ Au moyen d'une intégration par parties, vérifier que In = e - n.In-1 pour tout n > 0.
» depuis 2011, l'intégration par parties a disparu du programme des classes Terminales. On peut remplacer c/ par la question équivalente suivante :
c-bis/ Calculer la fonction dérivée de x → x(ln x)n. En déduire la relation In = e - n.In-1 pour tout n > 0.
d/ Au vu de la représentation graphique de la fonction x → ln x et de sa tangente en x = e dont on calculera une équation, montrer que l'on a : 0 < ln x < x/e pour tout x > 1 .
Programmation de la méthode en JavaScript :
Écrivons le petit programme JavaScript fort simple ci-dessous permettant le calcul de I20. Après exécution, vous devriez être étonné, voire déçu, du résultat affiché :
<SCRIPT
LANGUAGE=JavaScript> |
On
part de I = 1, c'est à dire I1, et on
calcule In ainsi que In-1 pour
vérifier la stabilité des calculs.
In-1 est récupéré dans J
avant le calcul de In stocké dans I.
Hélas, malgré ces quelques précautions,
tout se gâte très vite. Le résultat est
clairement aberrant dès I18.
Vu que I1 = 1, il n'y a pas d'erreur de calcul sur cette valeur. Notons I'n la valeur machine de In. A chaque itération, il se greffe, pour In (n >1), une erreur de calcul et une erreur de stockage que nous supposons temporairement du même ordre et que nous notons ε.
Nous allons montrer que l'erreur absolue commise par l'ordinateur sur In est sensiblement proportionnelle à n! , où n! désigne la factorielle de n, soit : 2 × 3 × ... × n. Ce qui n'est guère encourageant.
Les facteurs d'erreurs sont :
➔ Dans toute la suite, la notation A = B [k] signifiera que A égale B à k près.
En tenant seulement compte de 1.et 2. ci-dessus :
Il apparaît alors que si δn (n > 2) est l'erreur sur In, alors :
Pour n > 2, l'erreur est multipliée par le rang et augmentée de ε à chaque itération :
On en déduit :
Ceci est tout à fait tragique et abominable, car avec un ordinateur travaillant à 10-16 près, on peut s'attendre au pire du côté de n = 16. De plus, du fait que nIn tend vers e, l'ordinateur fait, à chaque itération, la différence de deux nombres "presque" égaux", donc la somme de deux nombres "presque" opposés (cf. erreur sur la somme), ce qui laisse prévoir des erreurs considérables et grandissantes dès n = 16. Ce que confirme les calculs de la machine.
On peut toutefois se sortir de ce mauvais pas, comme l'indique J.H. Saïac, de la façon suivante :
Mais que vaut I50
?
Admettons I50 = 0 avec une erreur ε,
de l'ordre de e/(n+1) compte tenu de l'encadrement valable pour x
> 1 : 0 < ln x < x/e (ln "reste sous sa tangente"
en x = 1).
Un raisonnement "inverse" analogue au précédent permet d'estimer l'erreur à :
C'est dire que l'erreur sur I20 sera négligeable, d'autant que cette fois, la différence
n'est pas l'addition de deux nombres "presque" égaux. Cette prévision est confirmée par l'ordinateur dans le programme ci-après :
<SCRIPT
LANGUAGE=JavaScript> |
L'exécution de ce programme fournit :