9
Chapitre
Vouloir faire des mathématiques avec une calculatrice, ou un ordinateur, semble relever de la gageure ! En effet, d’un côté, un mathématicien travaille de façon symbolique avec des nombres très variés, comme 1/3 ou 2 ou encore , c’est-à-dire des nombres qui bien souvent possèdent un nombre illimité de chiffres après la virgule. De l’autre, du fait des incontournables contraintes matérielles, les représentations de nombres dans un microprocesseur sont bien évidemment bornées.
Toute la question est de savoir comment le caractère intrinsèquement fini de la calculatrice peut rendre compte de l’infini des mathématiques. Nous nous proposons dans ce chapitre de donner quelques éléments de réflexion sur ces problèmes importants.
Sommaire
Chapitre 9. Arithmétique de la calculatrice... 151
1. Nombres machine et … nombres réels ... 152
1.1 Mode exact ou approché ? ... 152
1.2 Avec quels nombres une calculatrice travaille-t-elle ? ... 153
1.3 Et les nombres réels des mathématiciens ? ... 155
1.4 L’erreur d’affectation ... 157
2. Opérations en arithmétique à virgule flottante ... 162
2.1 Principe des calculs pour les quatre opérations ... 162
2.2 Les différences évanescentes ... 166
2.3 Dépassement de capacité ... 168
3. Un exemple de propagation des erreurs d’arrondi ... 170
3.1 De l’influence des opérations sur le résultat obtenu ... 170
3.2 Bilan de ces différents calculs… ... 171
3.3 Propagation des erreurs d’arrondi ... 172
3.4 Correction de l’arithmétique de la calculatrice ... 174
4. Résoudre une équation du second degré dans les réels ... 177
4.1 La méthode naturelle ... 177
4.2 Vers une fonction plus performante ... 177
BILAN : autour de l’ensemble des nombres calculatrice ... 180
Chapitre 9.
Arithmétique de la
calculatrice
1. Nombres machine et … nombres réels
1.1 Mode exact ou approché ?
Avec l’unité nomade, on accède à ce réglage avec la touche ~ (menu Fichier, Réglages, Réglages du classeur sur le logiciel) :
Le mode Exact renvoie toujours un résultat exact – en cas d’impossibilité de calcul, le résultat qui a été saisi ; le mode Approché renvoie toujours un résultat approché, comme une calculatrice traditionnelle ; le mode Auto combine les deux : exact quand c’est possible, approché sinon.
Ci-dessous quelques exemples de calculs dans les différents modes :
mode Exact mode Approché
mode Auto
Une ruse que nous utiliserons parfois : il suffit dans un calcul, quel que soit le mode choisi, d’introduire un nombre « à virgule », comme 2.718 pour que le résultat soit donné en mode approché.
Notamment, et nous ferons l’usage de cet artifice parfois, le simple fait de multiplier un résultat par 1.0 en donne une valeur approchée1 :
Nous profitons de ce menu pour régler le classeur à Flottant 12 : notons que c’est simplement un paramètre concernant l’affichage des résultats car les calculs sont toujours effectués au maximum des possibilités de la calculatrice.
1.2 Avec quels nombres une calculatrice travaille-t-elle ?
Les constructeurs de calculatrices gardent jalousement le secret sur leurs systèmes de représentation des nombres : on n’en trouve pas trace dans la notice de la TI-Nspire. Mais on peut penser, sans prendre trop de risques, que TI s’appuie pour la TI-Nspire sur le principe de codage Décimal Codé Binaire (DCB) qui se distingue dans sa forme des codages dits IEEE, plus lourds, implantés sur les ordinateurs.
Essayons d’appréhender la situation que l’on rencontre sur notre calculatrice : sans entrer dans des détails techniques ardus, nous nous contenterons de comprendre ce que la calculatrice nous révèle de son mode de fonctionnement à partir de l’affichage des résultats.
Travaillons d’abord en mode approché. Quel est le résultat renvoyé par exemple pour le nombre réel 100 ?
D’une part, on peut lire un résultat, 5.18784831432E49, avec 12 chiffres significatifs (dont 1 chiffre non nul avant la virgule).
Quand on « redescend » le résultat en ligne de commande, on constate que la calculatrice travaille en fait avec 14 chiffres significatifs : elle utilise en fait deux chiffres supplémentaires, ici 1 et 6, qu’on appelle des chiffres de réserve. Les chiffres de réserve lui servent notamment à arrondir le résultat affiché.
D’autre part, apparaît un exposant de la puissance de 10, qui peut varier sur une TI-Nspire entre –999 et 999.
Sur cet autre exemple, seulement 11 chiffres significatifs s’affichent, car le dernier… est 0 (voir les chiffres de réserve et l’arrondi qui en résulte).
1 … ce qui évite l’utilisation de approx ou la combinaison de touches /·.
Ci-dessous figurent quelques exemples de nombres :
Plus généralement, en mode approché, un nombre machine s’écrit sous la forme
1, 2... N
10p x d d d où N est le nombre de chiffres significatifs de la calculatrice, ici égal à 142, et où d1, d2, ..., dN sont des chiffres du système décimal. Ce nombre est précédé d’un signe + ou –.
1, 2... N
m d d d est appelé la mantisse du nombre x. Si l’on suppose de plus que d1 0 – ce que l’on a observé sur la calculatrice – le nombre est dit écrit en virgule flottante normalisée : la mantisse m est alors nécessairement comprise entre 1 et 9,999 999 999 999 9.
p est appelé l’exposant du nombre x : il peut varier sur une TI-Nspire entre –999 et 999.
Attention à bien utiliser la touche i pour saisir un nombre en virgule flottante : la multiplication par une puissance de 10 donne un résultat équivalent, mais un calcul doit être effectué, qui prendra plus de temps.
Comme on le voit sur l’écran précédent, le nombre saisi, en fonction de sa taille apparaîtra ou bien en virgule flottante (si sa partie entière dépasse 12 chiffres), ou bien en écriture traditionnelle (sinon).
Cardinal de l’ensemble des nombres machine
Cet ensemble est fini : on l’oublierait presque tant la calculatrice semble capable d’effectuer n’importe quel calcul. Il est facile d’en donner le cardinal. En effet, dans le système de représentation des nombres réels de la calculatrice que nous venons de décrire, le nombre de nombres qui peuvent être représentés exactement par la machine s’élève à :
2 9 1013 (2 999 +1) + 1.
En effet, on a : 2 possibilités pour le signe, 9 pour le choix de d1 (pas le 0), 1013 pour le choix de d2, ..., d14,
2 999 + 1 pour l’exposant (on n’oublie pas de rajouter 1 pour l’exposant 0), et le zéro, pour lequel il faut rajouter 1 !
C’est un nombre colossal, égal à 359 820 000 000 000 001.
2 On compte ici les chiffres de réserve, au nombre de deux.
Nous appellerons dans ce chapitre l’ensemble de tous les nombres que la machine peut représenter en virgule flottante.
Première différence de taille – nous en pointerons bien d’autres – : entre et : le premier est fini, le second infini (il a même la puissance du continu).
La calculatrice en mode approché ne peut pas donc pas représenter tous les nombres réels, ni même tous les décimaux ou tous les entiers…
Mais la calculatrice fonctionne aussi en mode exact. Elle peut aussi travailler : de façon formelle avec des nombres comme 2, ou ou e ou i ;
avec des nombres entiers longs, allant jusqu’à un peu plus de 913 chiffres3.
On peut noter l’ensemble de tels nombres : de même que pour , l’ensemble est aussi un ensemble fini.
Par ailleurs, la calculatrice est aussi capable d’effectuer du calcul formel avec des variables désignées par une ou plusieurs lettres, représentant un nombre non précisé. On peut mener alors un calcul comme on le ferait en mathématique : factorisation, développement, résolution d’équation, dérivation, etc. Nous ne développerons pas ce point dans ce chapitre.
1.3 Et les nombres réels des mathématiciens ?
Première manifestation du conflit nombres réels-nombres machine. Tous les nombres réels ne sont pas représentables exactement4 par la calculatrice :
soit qu’ils soient trop grands en valeur absolue et dépassent le plus grand nombre de la calculatrice 9,999 999 999 999 9 10999 : on parle dans ce cas d’overflow5 ;
soit qu’ils soient trop proches de 0, plus précisément compris en valeur absolue entre 0 et 1 10–999 : on est alors dans une situation d’underflow ;
soit enfin, cas le plus fréquent, qu’ils soient compris strictement entre deux nombres machine, par exemple 1/3 compris entre 0,333 333 333 333 33 et 0,333 333 333 333 34.
3 Cette dernière possibilité est absolument remarquable pour l’arithmétique. Nous en avons développé de nombreux exemples dans les chapitres qui précèdent.
4 Sauf bien évidemment les nombres que l’on représente formellement, comme … Nous écarterons ce cas dans la suite du chapitre.
5 Ou dépassement de capacité ou encore de surpassement de capacité mais le mot anglais est le plus fréquemment employé. Pour underflow, le mot sous-passement de capacité est parfois utilisé.
En cas d’overflow, la valeur est remplacée par le symbole ou – et un message d’avertissement est affiché :
Quant à l’underflow, il est passé sous silence, et le nombre est mis d’autorité à 0 : cela peut, comme on le verra sur certains exemples altérer de façon importante le résultat d’un calcul.
Cas plus fréquent, quand un nombre réel est compris strictement entre deux nombres machine, la machine applique une procédure pour remplacer le nombre par un nombre machine, avec lequel elle peut travailler. Cette procédure entraînera ce qu’on appelle une erreur d’affectation : c’est le premier type d’erreur que l’on rencontre quand on travaille avec une calculatrice…
Prenons un exemple. Entrons dans une TI-Nspire le nombre : 1,234 567 890 129 198 76.
18 chiffres significatifs… soit 4 de trop pour la calculatrice !
Que renvoie-t-elle ?
La calculatrice affiche 1.23456789013 : c’est un nombre de 12 chiffres, le 12e ayant été arrondi.
Faisons apparaître les chiffres de réserve, 9 et 2, en redescendant le nombre en ligne de commande : la calculatrice travaille avec 1.2345678901292. Ils servent notamment ici à arrondir le résultat6 : pour arrondir à 3, la calculatrice a besoin de savoir, qu’après le 2 vient un 9…
6 Mais ce n’est pas leur seule utilisation ! Ils servent aussi à limiter la propagation des erreurs d’arrondi.
Le dernier chiffre de réserve est lui-même arrondi : la saisie 919876 a été transformée en 92, ce qui laisse penser que la calculatrice a connaissance du chiffre qui vient après le 17. Ce qui est encore confirmé par les exemples suivants :
Dans les deux cas, le 12e chiffre est arrondi… et le 14e aussi (pour mémoire
3,141 592 653 589 793 238 462 643 383 279 502 884).
En résumé, il n’est pas inutile d’avoir en tête ce que des collègues de l’IREM de Montpellier appelaient, il y a quelques années, la « trilogie de la calculatrice » :
1.4 L’erreur d’affectation
Ce que l’on appelle l’erreur d’affectation, c’est précisément l’écart entre le nombre réel que l’on cherche à représenter et le nombre machine qui le représente effectivement8.
C’est en quelque sorte le prix à payer de la finitude de toute calculatrice.
Cette erreur peut être calculée dans les exemples précédents. Nous ferons les calculs systématiquement avec les chiffres de réserve, avec lesquelles la calculatrice travaille :
1,234 567 890 129 2 – 1,234 567 890 129 187 6 = 1,24 10–14.
Obtenir une majoration de l’erreur d’affectation
L’erreur d’affectation a pu précédemment être calculée parce qu’on connaissait précisément la valeur entrée. C’est rarement le cas dans la pratique9.
7 Travaille-t-elle avec un chiffre de réserve supplémentaire ? La question est posée…
8 C’est une erreur absolue…
9 Connaître l’erreur exactement, c’est aussi connaître exactement la valeur entrée…
La trilogie de la calculatrice :
le nombre qu’on rentre, celui qu’elle affiche,
celui avec lequel elle travaille…
Très souvent, ces nombres sont deux à deux différents…
Par exemple, quand on souhaite travailler avec 2, la calculatrice affiche en fait le nombre décimal 1,414 213 562 37 (12 chiffres significatifs) et elle effectue ses calculs avec 1,414 213 562 3731, (14 chiffres significatifs)10.
Comme précédemment, l’erreur d’affectation est celle que l’on commet en remplaçant 2 par 1,4142135623731 (valeur considérée avec les chiffres de réserve).
À défaut d’être connue exactement, l’erreur peut être facilement majorée. Comme le résultat dans ce cas est arrondi, on est alors sûr que :
1,414 213 562 373 05 2 < 1,414 213 562 373 15
(la véritable valeur est 1,414 213 562 373 095 048 801 688 724 209…) –5 10 – 14 2 – 1,414 213 562 373 1 < 5 10–14
soit
| 2 – 1,414 213 562 373 1| 5 10–14.
Remarquons que si l’on change le nombre11, le majorant de l’erreur d’affectation change lui aussi.
Ainsi par exemple, avec 123456789 :
on peut écrire :
11 111,111 060 555 5 123 456 789 < 11 111,111 060 556 5 –5 10–10 123 456 789 – 11 111,111 060 556 < 5 10–10 soit 123 456 789 11111,111 060 6 5 108.
Un résultat général…
On dispose du résultat général suivant qui donne une majoration de l’erreur commise. On note habituellement fl(a)12 le nombre machine correspondant à a.
Théorème
Dans une arithmétique flottante à t chiffres on a afl
a 5a p10t, avec p = 1 dans le cas de l'arrondi et p = 2 dans le cas de la troncature.
10 Une fois de plus le dernier chiffre de réserve est arrondi.
11 Ou du moins son ordre de grandeur…
12 fl pour flottant.
Démonstration
Plaçons-nous d’abord dans le cas de la troncature.
Soit donc a = a a1, 2...a at t1... 10 q avec a1 0 le nombre réel que l’on cherche à rentrer dans la calculatrice.
Puisqu’il y a troncature à t chiffres significatifs, on aura : fl(a) = a a1, 2...at10q avec a1 0.
L’erreur commise est donc :
11 2
fl 0,0...0 ... 10 (avec t 1 chiffres 0 après la virgule) , ... 10 10
q t
q t
t t
a a a
a a
Cherchons à majorer cette expression :
1, 2... 10 10 1 10 ,1 2...
t t
a a a a a car a1 0.
Par conséquent :
1 2 1 2fl t , t ... 10q 10 t 10 , ... 10q 10 t 10 10 t a a a a a a a ce qui est bien la majoration attendue.
Plaçons-nous maintenant dans le cas de l’arrondi.
Un cas se traite immédiatement, de la même façon que précédemment : en posant
1, 2... t t 1... 10q
a a a a a avec a1 0 et at10,1, 2, 3 ou 4, après arrondi à t chiffres significatifs, on aura cette fois :
1 2fl a a a, ...at10q et l’erreur commise est donc :
1 21 2
fl 0,0...0 ... 10 (avec 1 chiffres 0 après la virgule) , ... 10 10
q
t t
q t
t t
a a a a t
a a
Par le même raisonnement que précédemment, on a :
1 2 1 2fl t , t ... 10q 10 t 5 , ... 10q 10 t 5 10 t
a a a a a a a , ce que l’on cherche à obtenir.
Supposons maintenant que at1 soit égal à 5, 6, 7, 8 ou 9.
Dans un premier temps, on cherche à arrondir m a a1, 2...a at t1.... Attention, l’arrondi que l’on va obtenir ne contient pas forcément les mêmes chiffres que m, même sur les t – 2 premiers chiffres.
Ainsi si l’arrondi à 4 chiffres significatifs de 1,2879876 est 1,288, l’arrondi de 1,9999654 est 2,000…
qui n’a aucun chiffre en commun avec le nombre de départ. Il faut être prudent ! Notons donc b b1, ...2 bt l’arrondi de m. Alors :
1, ...2 t 1, 2... t t 1... 0,0...0 t 1 t 2...
b b b a a a a c c , avec t – 1 chiffres 0 après la virgule.
Que se passe-t-il dans la soustraction ?
b1 , b2 … bt
– a1 , a2 … at at+1 at+2 …
0 , 0 0 ct+1 ct+2 …
Si at1 est le dernier chiffre non nul de m, alors ct15 et la différence vaut moins de 5 10 t. Sinon, at1 hérite d’une retenue précédente égale à 1 et ct1 est alors inférieur ou égal à 4.
Bref, dans les deux cas :
1, ...2 t 1, 2... t t 1... 0,0...0 t 1 t 2... 5 10 t b b b a a a a c c
1 2 1 2fl fl t , t ... 10 t 10q 5 10t 10q 5 , ... 10t 10q 5 10 t a a a a c c a a a
C’est bien le résultat attendu.
On remarque que l’erreur produite lors d’un arrondi est majorée par un nombre deux fois plus petit que celui obtenu par troncature.
Ce théorème donne un majorant de l’erreur absolue : il est immédiat d’en déduire que l’erreur relative
fl
a a
a
est majorée par 5p 10–t, avec p = 1 dans le cas de l'arrondi et p = 2 dans le cas de la troncature.
Pour la TI-Nspire, en tenant compte des chiffres de réserve, on sait que t = 14 et que le quatorzième chiffre est arrondi : un majorant de l’erreur relative est donc 5 10–14.
À cause des erreurs d’affectation, deux nombres réels différents peuvent être représentés par le même nombre machine.
Ainsi par exemple, 1,234567890123456789 et 1,234567890123498765 sont représentés par le même nombre machine,1,2345678901235, comme le prouvent les écrans suivants :
Plus généralement, on conçoit qu’un même nombre machine représente en fait une infinité de nombres réels.
À l’inverse – rien n’est vraiment simple quand on travaille avec une calculatrice – deux nombres réels égaux sont parfois représentés par des nombres machine différents !
Prenons par exemple 3 2 2 et 2 1 : ces deux réels sont égaux (ce sont deux nombres positifs qui ont même carré) et la calculatrice en mode exact le confirme :
En mode approché (faire /·), elle les considère comme différents :
Si l’on s’en tient à l’affichage, les nombres ont l’air égaux ; en fait ils diffèrent légèrement par leurs chiffres de réserve (pour le premier, 08 et pour le second 10) : les calculs qui ont conduit aux résultats n’ont pas été exactement les mêmes…
Cet exemple met en évidence la supériorité du calcul formel sur le calcul en virgule flottante…
Gardons nous d’être là encore trop confiants, même si des progrès ont été faits ! Là où la Voyage 200 renvoyait le problématique :
la TI-Nspire obtient des résultats tout à fait satisfaisants :
Plus généralement, la calculatrice renvoie true si elle trouve un chemin d’un des membres du signe = vers l’autre ; sinon elle renvoie false. Mais on peut concevoir que le chemin à trouver soit invisible à la calculatrice. Par exemple, on sait grâce aux formules élémentaires de trigonométrie que
1 cos sin 12
24 2
… mais cette égalité formelle n’est pas perçue par la TI-Nspire, pas plus d’ailleurs que l’égalité approchée, à cause des chiffres de réserve…
En tout état de cause, la prudence s’impose, même avec le calcul formel.
Bref, il n’existe pas de panacée en matière de calcul par ordinateur ou calculatrice : on ne peut pas demander à ce type d’outil, par essence fini, de rendre compte de la complexité et de l’infinitude des objets mathématiques, qui relèvent du monde des idées. Des problèmes sont donc inévitables, et ce quel que soit le logiciel ou la calculatrices utilisés. Si l’utilisateur se doit de les connaître, pour bien maitriser son outil, il convient de rester réaliste et de ne pas mettre trop rapidement la calculatrice, ou l’ordinateur, aux oubliettes : on y perdrait un outil de calcul personnel extraordinaire qui rend dans la plupart des cas de bien fiers services13.
2. Opérations en arithmétique à virgule flottante
Si l’on se contentait juste d’entrer des nombres dans la calculatrice, les problèmes seraient relativement limités ! Mais aux erreurs d’affectation mentionnées ci-dessus vient s’ajouter une difficulté supplémentaire : on fait des calculs, de nombreux calculs même, et le résultat d’une seule opération portant sur deux nombres machine donne rarement exactement un nombre machine.
Nouvelle source d’erreur donc…
Si l’erreur commise pour une seule opération peut assez bien être cernée, la question se pose de la validité d’un résultat renvoyé lorsqu’on enchaîne les opérations par dizaines, voire par centaines dans un programme. Le problème est d’un abord difficile, sans solution simple. Tout au plus est-il important d’avoir quelques points de repère, que nous examinerons dans ce qui suit.
On pourrait croire que l’utilisation du mode exact de la calculatrice aplanit toutes les difficultés.
D’une part, les remarques des pages précédentes dissiperont les éventuelles illusions qu’on pourrait avoir. D’autre part, les calculs exacts, outre qu’ils pénalisent lourdement le processeur et la mémoire, ne sont intéressants que lorsque le résultat se simplifie bien et s’appréhende facilement… mais c’est rarement le cas en analyse ! Nous aurons l’occasion de revenir sur ce point.
2.1 Principe des calculs pour les quatre opérations
Dans les exemples qui suivent, nous nous placerons dans le cas fictif d’une arithmétique à 3 chiffres significatifs et des exposants compris entre –15 et 15 ; nous supposerons que le dernier chiffre affiché, le troisième, est arrondi14.
On additionne en mettant en évidence un exposant commun (le plus grand), puis en effectuant l’opération, comme on procéderait à la main.
Étudions quelques exemples.
13 Nous avons montré et nous montrerons par la suite – du moins l’espérons-nous ! – combien la TI-Nspire ou son logiciel, bien utilisés, peuvent être extraordinairement performants… et d’une utilisation très commode.
14 Concrètement, cela induit que, d’une façon ou d’une autre, on connaisse le quatrième chiffre significatif… Mais nous n’entrerons pas dans les détails techniques d’architecture de la machine ou de l’ordinateur qui permettrait de résoudre ce point.
(+1,25 105) + (+6,57 106) = (+0,125 + +6,57) 106 = +6,695 106 +6,70 106
Le résultat obtenu n’est pas un nombre machine – c’est souvent le cas – mais tout revient à arrondir le résultat obtenu. En d’autres termes, l’erreur que l’on commet n’est autre qu’une erreur d’affectation sur le résultat du calcul.
C’est la situation que l’on rencontre par exemple ci-après :
(+4,37 1011) + (+1,25 105) = (+4,37 + +0,00000125) 1011 = +4,37000125 1011 +4,37 1011.
Là encore, l’erreur commise n’est qu’une erreur d’affectation sur le résultat du calcul. Remarquons aussi qu’aucun des chiffres significatifs du deuxième terme n’a été pris en compte dans le résultat final, les nombres à ajouter étant de taille trop différente (la situation doit être évitée autant que possible lors de calculs répétés).
Voir par exemple l’exemple qui suit, sur une TI-Nspire :
Mathématiquement, dans ce cas particulier, tout revient à dire que l’on a l’égalité-machine x + z = x, bien que z soit non nul ! L’addition dans l’ensemble des nombres calculatrice perd une propriété pourtant très élémentaire de l’addition des réels15.
Dans le même ordre d’idée, le nombre 1 possède un « successeur » dans l’ensemble des nombres machine : c’est 1 + 10–13 = 1,0000000000001, alors que 1 + 10–14 = 1.
10–13 est appelé l’epsilon machine : c’est la plus grande valeur telle que 1 1. Pour la TI- Nspire, on a vu que l’erreur relative d’affectation était égale à 5 10 14/ 2.
La soustraction fonctionne de façon analogue :
(+5,78 106) – (+3,23 105) = (+5,78 – +0,323) 106 = +5,457 106 +5,46 106 L’erreur commise est une erreur d’affectation sur le résultat du calcul.
Mais peuvent se produire des disparitions de chiffres significatifs, lorsque l’on soustrait deux nombres très proches : comme ils sont proches, ils ont des chiffres en commun, qui disparaissent par soustraction. Cette disparition accroît fortement l’erreur sur le résultat. On parle alors de différence évanescente ou parfois d’erreur de cancellation.
15 Elle en perdra beaucoup d’autres, comme on le verra dans la suite… ce qui n’empêche pas la calculatrice ou l’ordinateur d’être un outil précieux pour faire des mathématiques.
Prenons un exemple, en calculant x – y, où x = +3,24 105 et y = +3,23 105.
x – y = (+3,24 105) – (+3,23 105) = (+3,24 – +3,23) 105 = +0,01 105 = 1,00 103 = 1000 La situation peut paraître anodine ainsi présentée… car les calculs qui sont faits dans ce cas sont corrects, bien évidemment, puisqu’on raisonne déjà sur des nombres machine…
Mais dans la pratique, c’est rarement le cas ! Les nombres qui interviennent ont presque toujours été arrondis : ainsi, x peut provenir par exemple de 324 499, arrondi à 324 000 = +3,24 105 et y de 323 000.
x – y en réalité vaudra 1499, à rapprocher du 1000 donné par la calculatrice : 3 chiffres significatifs ont été écartés du calcul. L’erreur absolue est de 499, tandis que l’erreur relative s’élève à
1499 1000 499
33, 2%
1499 1499
.
Plus généralement, x représente a priori un nombre qui, compte tenu des arrondis, est dans l’intervalle :
[+3,235 105 ; +3,245 105[
tandis que –y représente un nombre de l’intervalle ]–3,235 105 ; –3,225 105].
On peut donc affirmer que :
x – y ]0 ; +0,02105[ = ]0 ; 2000[.
Le résultat peut donc valoir n’importe laquelle des valeurs de cet intervalle… tandis que la calculatrice renverra dans tous les cas 1000… L’erreur commise peut devenir importante.
Plus généralement, l’erreur de cancellation intervient lorsque l’on soustrait deux nombres x et y proches, ayant de nombreux chiffres en commun… qui vont disparaître par soustraction16, comme dans l’exemple qui suit :
C’est une erreur fréquente, qui peut être redoutable et perturber profondément le résultat d’un calcul.
Nous verrons dans le paragraphe suivant quelques exemples où cette erreur intervient et comment la contourner.
Poursuivons avec la multiplication ou la division. On multiplie, ou on divise, en multipliant, ou en divisant, les mantisses et en additionnant, ou en soustrayant, les exposants. Ainsi :
(+1,25 105) (–1,28 105) = (+1,25 –1,28) 1010 –1,60 1010
Dans ce cas, le produit des deux nombres machine est bien un nombre machine. Mais il arrive, comme pour l’addition, que l’on perde des chiffres significatifs, lorsque le résultat obtenu dépasse les capacités d’affichage de la calculatrice. On commet alors l’équivalent d’une erreur d’affectation par arrondi sur le résultat du calcul. Ainsi :
(+1,25 105) (+6,57 106) = (+1,25 +6,57) 1011 = 8,2125 1011 8,21 1011 (+1,25 105) / (+4,37 1011) = (+1,25 / +4,37) 10–6
+0,286041 10–6 +2,86 10-7
16 C’est le principal problème que l’on rencontre avec les additions-soustractions : à tel point que si l’on peut éviter de faire une soustraction par transformation algébrique, on ne s’en privera pas, quitte à ce que les calculs soient plus compliqués !
Peuvent aussi survenir un overflow, ou sur-passement de capacité, et un underflow, ou sous- passement de capacité, comme le montrent les exemples suivants.
(+1,25 105) (+4,37 1011) = (+1,25 +4,37) 1016
= +5,4625 1018 = +5,46 1018 …overflow…
En cas d’overflow sur une TI-Nspire, le résultat est considéré comme égal à l’infini, sans pour autant que les calculs soient bloqués :
(+2,15 10–11) / (+4,37 1011) = (+0,215 / +0,437) 10–22
+0,491990 10–22 4,91 10–22 …underflow…
La TI-Nspire remplace le résultat par 0 quand elle rencontre un underflow, et ne renvoie aucun message d’avertissement. Il est vrai que, dans ce cas et contrairement à l’overflow, l’erreur commise est souvent très petite.
Les quelques exemples précédents tendent à montrer que l’erreur commise lors d’une opération arithmétique, sauf dans le cas d’une situation de différence évanescente, d’un overflow ou d’un underflow, n’est rien d’autre qu’une erreur d’affectation sur le résultat obtenu : nous admettrons que c’est bien le cas en général.
Tenant compte du théorème établi plus haut, on peut alors affirmer que : Soit * une des quatre opérations arithmétiques +, –, et /.
Hors cas de différence évanescente, d’overflow ou d’underflow, l’erreur produite sur l’opération * satisfait à l’inégalité :
* fl * 5 * 10 t
A B A B A B p
avec p = 1 dans le cas de l’arrondi et p = 2 dans le cas de la troncature.
Malheureusement on ne dispose pas toujours d’un résultat analogue pour les fonctions mathématiques usuelles : il suffit de reprendre le calcul de sin
24
fait au début du chapitre pour réaliser que des problèmes peuvent survenir.
2.2 Les différences évanescentes
Nous avons vu que cette situation pouvait introduire des erreurs importantes dans un calcul ; comme de plus, les calculs que l’on effectue à la calculatrice sont rarement isolés, ces erreurs se propagent et peuvent ôter tout sens à un résultat renvoyé.
La situation doit donc être identifiée lorsqu’elle survient, et contournée si c’est possible.
Facile à diagnostiquer en fait : elle n’est susceptible d’apparaître qu’avec des différences… une façon de contourner le problème est de bannir purement et simplement, lorsque c’est possible, les différences dans un calcul. D’autant que la difficulté peut souvent être contournée par un calcul analytique.
Quelques exemples montrent ci-après comment on peut procéder.
Soit à calculer 1 1
123456001 123456002 . Sans précaution la calculatrice renvoie :
Remarquons que le résultat n’affiche plus que 6 chiffres significatifs, alors que la calculatrice peut en gérer jusqu’à 14. Cette perte de chiffres significatifs est caractéristique d’une situation de différence évanescente.
Peut-on se débarrasser de la différence ? Oui, car il est immédiat que
1 1 1 1
1 1 1
x x
x x x x x x
.
On peut donc écrire que 1 1 1
123456001 123456002 123456001 123456002
… ce qui donne
maintenant sur la calculatrice :
On constate que la simple transformation algébrique du calcul nous permet de récupérer 14 chiffres significatifs, au lieu des 6 précédents. On voit bien dans cet exemple tout l’intérêt qu’il y a à se débarrasser de la soustraction… puisque c’est possible !
Un autre exemple, avec une situation que l’on rencontre quand on cherche à conjecturer à la calculatrice la limite quand x tend vers 0 de 1 1
( ) x
f x x
. Sans aucune précaution – voir la colonne B de la feuille de calcul ci-dessous – on arrive à :
Le calcul est fait avec approx.
De là à conclure que la limite est 0, il n’y a qu’un pas… qu’il ne faut pas franchir, car on peut à juste titre suspecter une situation de différence évanescente. En effet, lorsque x est petit, 1 x 1 – on peut même avoir l’égalité pour la calculatrice lorsque x est inférieur à l’epsilon-machine – et l’on est amené à faire une différence de deux nombres très voisins, qui fait disparaître de nombreux chiffres significatifs17…
Là encore, une transformation algébrique simple règle la difficulté. On sait que :
1 1 1 1
1 1 1
1 1
1 1 1 1
x x
x x
x x x x x x
… et les différences gênantes ont disparu (colonne C) ! On peut alors conjecturer sans peine que la limite est 0,5.
Pour le dernier exemple, nous cherchons à calculer sinxx, pour des valeurs de x proches de 0. On constate très vite que tous les chiffres significatifs du résultat ont disparu et qu’on ne peut donner de réponse satisfaisante (colonne B).
17 Voire tous les chiffres significatifs pour donner 0 ici lorsque x est très petit. D’où notre problème !
On peut contourner cette difficulté avec la formule de Taylor :
3 5
sin 7
6 120
x x
x x o x ,
avec une précision suffisante pour les valeurs considérées de x. C’est ce que nous faisons dans la colonne C du tableur.
Un autre exemple peut être évoqué : il vaut mieux remplacer le calcul de ln x – 1 par ln x e
lorsque x est proche de 1.
2.3 Dépassement de capacité
Soit à calculer le plus précisément possible l’expression 296
x x
xe
e x pour x = 2 310.
Le premier réflexe est de prendre sa calculatrice et de lancer le calcul :
Réponse undef… on doit donc regarder le problème de plus près. Le message d’avertissement laisse suspecter des underflows ou overflows.
Une première approche consiste à regarder séparément comment se comportent les numérateurs et dénominateurs :
L’un et l’autre sont en dépassement de capacité : la calculatrice répond sagement et undef pour le quotient !
L’expression doit être transformée pour qu’on puisse espérer avancer dans le calcul. On peut écrire :
296 296
1
x
x x
xe x
e x x e
Regardons ce que cette formule donne :
Un premier résultat donc ! Mais peut-on être satisfait ou doit-on regarder d’un peu plus près ? On peut craindre un underflow pourx296ex.
Le résultat est effectivement nul, sans aucun message d’avertissement… Il faut mieux regarder de près la contribution de chacun des facteurs :
On constate que le produit e2 310 par 2 310296 est sûrement un nombre raisonnable en taille, mais qui passe à 0 de façon quelque peu abusive à cause de l’underflow sur l’exponentielle.
Comment remédier à tout ceci ? Une nouvelle transformation algébrique s’impose :
296 296
148 2 148 2
1 1 1
x
x x x x
xe x x
e x x e
x e x e
Le résultat est maintenant :
Le produit 2 310148e1155 peut être calculé correctement et on peut maintenant avoir confiance dans le résultat affiché.
On constate sur cet exemple, et sur ceux qui ont précédé, que des expressions mathématiquement égales sont bien loin parfois d’être équivalentes du point de vue de la calculatrice : elles peuvent donner des résultats qui diffèrent. Les propriétés de l’ensemble des nombres machine ne sont donc pas les mêmes du point de vue des opérations que celles de l’ensemble des réels. On doit systématiquement réfléchir à la meilleure formule pour qu’un calcul soit mené à son terme le plus efficacement possible.
3. Un exemple de propagation des erreurs d’arrondi
On se propose d’examiner comment les erreurs d’arrondi se propagent dans un calcul banal, mais avec de nombreuses opérations, la somme
500 000
1
1
k k calculée avec le logiciel sur l’ordinateur.
Elles proviennent, comme on l’a vu de deux causes :
les erreurs d’affectation sur chacun des nombres entrés (ou presque !) ;
les erreurs dues aux opérations, qui sont, comme on l’a vu, des erreurs d’affectation sur les résultats de chaque somme.
3.1 De l’influence des opérations sur le résultat obtenu
Gardons les mêmes nombres, et donc les mêmes erreurs d’affectation, mais modifions l’ordre des termes : les opérations ne seront donc pas exactement les mêmes. Mathématiquement, le résultat doit être le même. Qu’en est-il exactement ?
Faisons d’abord le calcul dans l’ordre croissant des entiers :
Réponse 13,699580042419 Puis dans l’ordre décroissant :
Réponse 13,699580042312 Résultat légèrement différent…
Ou encore en additionnant les entiers pairs dans l’ordre croissant, puis les entiers impairs dans le même ordre :
Réponse 13,699580042312
… en additionnant les entiers pairs dans l’ordre décroissant, puis les entiers impairs dans le même ordre :
Réponse 13,699580042314
… enfin en additionnant par les deux bouts…
Réponse 13,699580042324 On pourrait multiplier les exemples…
3.2 Bilan de ces différents calculs…
Point négatif : cinq façons d’organiser un même calcul, quatre résultats différents… Globalement, on ne peut qu’avoir de sérieux doutes sur les deux chiffres de réserve, ainsi que sur le douzième chiffre significatif.
Est-ce surprenant ? Non, car on a vu précédemment que des expressions mathématiquement égales ne sont pas forcément équivalentes du point de vue l’organisation des calculs.
Point positif : les différences se manifestent essentiellement sur les chiffres de réserve... C’est aussi leur rôle que d’amortir la propagation des erreurs d’arrondi dans un calcul.
Quelles sont les causes d’erreur ?
On a parlé des erreurs d’affectation, mais elles ne peuvent justifier tous les écarts : les différents calculs précédents faisant intervenir les mêmes nombres, on a nécessairement les mêmes erreurs d’affectation. Il faut cette fois regarder du côté des erreurs induites par les opérations.
Mais au fait, quel est donc le résultat exact ?
On peut l’obtenir en utilisant un logiciel de calcul formel en lui demandant d’afficher 50 chiffres significatifs… Sur la base des différents résultats obtenus, on peut penser que les 30 ou 40 premiers sont corrects. On obtient :
13,699580042305528321963895496730411108319299879385
À la lumière de ce résultat, le calcul fait avec les indices décroissants est un des deux qui donnent le résultat le plus proche.
Cela n’est pas surprenant et on peut en déduire une loi empirique générale, qui contribue à retarder l’apparition de sommes de nombres d’ordre de grandeurs différents : il vaut mieux effectuer une somme en allant du plus petit nombre vers le plus grand.
3.3 Propagation des erreurs d’arrondi
Limitons-nous au cas où l’on calcule la somme S dans l’ordre croissant S = 1
1 + 1 2 + 1
3 + … + 1 500 000.
Le résultat renvoyé pour ce calcul est le premier obtenu : 13,699 580 042 419. Un calcul d’erreur précis est délicat à faire. Tout au plus, nous nous contenterons de donner quelques éléments pour comprendre la pertinence du résultat renvoyé.
Si l’on écrit les premiers termes : 1,0000000000000
0,5000000000000 1,5000000000000
0,3333333333333 1,8333333333333
0,2500000000000 2,0833333333333
0,2000000000000 2,2833333333333
0,1666666666666 2,4499999999999
etc.
on réalise que chaque terme n’interviendra dans sa contribution qu’au plus avec ses 13 premières décimales18. En d’autres termes, l’erreur sur chacun des termes est moindre que 10-13. L’erreur au bout des 500000 termes sera majorée par 500 000 10-13 = 5 10-8 = 0,000 000 05.
On peut en déduire l’encadrement suivant :
13,699 580 042 419 S 0,000 000 05
13,699 580 042 419 0,000 000 05 S 13,699 580 042 4190,000 000 05 13,699 579 992 419 S 13,699 580 092 419
13,699 579 992 419 S 13,699 580 092 419
Avec ce calcul d’erreur, nous ne serions sûrs que des 4 premières décimales19 ; mais nous avons pour autant une valeur approchée à moins de 10 10-8 = 10-7 près.
Un tel calcul d’erreur d’erreur est particulièrement catastrophique et reflète sans doute très mal la réalité de notre résultat. L’erreur maximale est très peu probable : il faudrait pour ce faire que l’erreur sur chaque terme soit la plus grande possible, et qu’il n’y ait aucune compensation de ces erreurs d’un terme à l’autre. Ce n’est pas réaliste : la majoration obtenue est certes fiable, mais excessivement pessimiste. Ceci illustre la difficulté qu’il y a même pour un calcul simple à estimer de façon correcte l’erreur commise.
Une approche statistique est possible et fournit des résultats bien plus satisfaisants. Cette approche appréhende le calcul dans sa globalité et donne des résultats bien moins pessimistes que les désastreux calculs de majoration vus précédemment.
Appelons l’erreur commise sur la somme S précédente (possédant n = 500 000 termes) et ek l’erreur d’arrondi globale, quelle qu’en soit la cause, commise sur le terme d’ordre k de cette somme.
On a clairement : =
ekD’autre part, compte tenu de l’arrondi sur chaque terme, on sait que ek 5 1013.
L’idée est de considérer ek et comme des variables aléatoires et de faire les deux hypothèses suivantes :
(1) les erreurs ek sont des variables aléatoires indépendantes les unes des autres ;
(2) l’espérance mathématique de ek est égale à 0 : autrement dit, l’arrondi n’a pas plus de raison de se faire par excès que par défaut.
Remarquons que V e
k E e
k2
E e
k
2 E e
k2 5 1013
2D’après l’hypothèse (2), on a E
E
ek
E e( )k 0.D’après l’hypothèse (1), on a ( )V
V e( )k n
5 1013
2 et donc l’écart-type de vérifie :
V( ) 5 n 1013 .
18 Une de moins d’ailleurs quand la somme dépassera 10…
19 La configuration est toutefois particulière compte tenu des chiffres 7 9 9 et 8 0 0.
On pourrait conclure avec l’inégalité de Bienaymé-Tchebychev, mais le théorème central limite donne des résultats bien plus précis. Ce théorème permet d’affirmer que la loi de est une loi normale d’espérance 0 et d’écart-type
, majoré par 5 n1013. En d’autres termes,
suit la loi normale centrée réduite.
On sait alors que la probabilité que soit dans un intervalle d’amplitude 2
autour de 0 est d’environ 0,95 :
2 2
0,95p .
Comme 2
;2
5 n1013;5 n1013, on en déduit que :
5 1013 5 1013
0,95p n n . Avec n = 500 000, on peut écrire :
5 500 000 10 13 5 500 000 10 13
0,95 p
3,54 1010 3,54 1010
0,95p
Autrement dit, l’erreur probable est majorée dans 95% des cas par 3,54 10-10… résultat beaucoup plus intéressant que celui que nous avons obtenu par majoration plus haut.
On peut en déduire l’encadrement suivant :
13,699 580 042 419 S 0,000 000 000 354
13,699 580 042 419 0,000 000 000 354 S 13,699 580 042 419 0,000 000 000 354 13,699 580 042 065 S 13,699 580 042 773
13,699 580 042065 S 13,699 580 042773
Avec ce calcul d’erreur, nous sommes sûrs des 9 premières décimales, avec une erreur majorée par 7,08 10-10… mais avec une probabilité d’un peu plus de 0,95.
3.4 Correction de l’arithmétique de la calculatrice
Il est cependant possible d’atténuer ce phénomène de propagation des erreurs d’arrondi, pour obtenir un résultat satisfaisant même avec une calculatrice.
Pour mieux comprendre ce qui se passe, étudions un exemple particulier de ces erreurs dues à l’addition, au moment par exemple où la TI-Nspire vient de calculer s =
15 000
1
1
k k et qu’elle doit ajouter à ce nombre 1
15 001.
Examinons précisément quels calculs sont faits par la calculatrice. En faisant apparaître les chiffres de réserve, on a :
s 10,193 054 477 948 et 1
15 001 0,000 066 662 222 518 499
La somme effectuée à ce moment est donc la suivante, les chiffres en grisé n’étant pas pris en compte par la calculatrice :
1 0 , 1 9 3 0 5 4 4 7 7 9 4 8
+ 0 , 0 0 0 0 6 6 6 6 2 2 2 2 5 1 8 4 9 9 1 0 , 1 9 3 1 2 1 1 4 0 1 7 0 5 1 8 4 9 9 6 chiffres significatifs de 1
15 001 sont donc purement et simplement occultés dans ce calcul : cette perte, certes petite, contribue peu à peu à la dégradation des calculs.
Se pose alors une question : est-il possible de conserver ces chiffres significatifs qui disparaissent ? La réponse, paradoxalement, est oui et va grandement contribuer à améliorer le calcul.
Effectuons la suite de calculs suivants : d’abord, (s + 1
15 001) – s, qui met en évidence la valeur de 1
15 001 qui a été incorporée à s ;
par suite, 1
15 001, duquel on ôte le résultat précédent, donne la partie que l’on n’a pas utilisée de 1
15001 :
Remarquons que ce dernier résultat devrait être 0 mais… ce n’est pas le cas car les règles usuelles de calcul dans ne sont pas conservées pour l’ensemble des nombres de la calculatrice…
Nous voilà donc avec des décimales qui passaient jusqu’à présent aux oubliettes. Les récupérer pour chaque terme doit permettre d’améliorer le calcul de S.
Les remarques précédentes nous conduisent à écrire une fonction, pour atténuer les erreurs d’arrondi dues aux sommes successives. En effet, on peut facilement cumuler dans une variable e les erreurs d’arrondi calculées comme précédemment. Il suffit alors qu’à la fin la fonction retourne s + e au lieu de s pour que l’on obtienne un résultat plus précis.
C’est ce que fait la fonction suivante :
On obtient les résultats suivants :
Le calcul est plus long que précédemment : on n’y gagne guère à remplacer une fonction de la calculatrice (), par un programme en TI-Basic. Mais la réponse obtenue est particulièrement intéressante.
Le résultat à 14 chiffres est :
13,699 580 042 306 au lieu de
13,699 580 042 312
ce qui est exactement la réponse renvoyée par WIMS, arrondie à 14 chiffres significatifs. On peut considérer que notre fonction a neutralisé la propagation des erreurs d’arrondi.
Mais on peut encore affiner le résultat en ajoutant à la main les contenus des variables s et e. On obtient s 13,699 580 042 419 et e 0,000 000 000 113 493 849 9
1 3 , 6 9 9 5 8 0 0 4 2 4 1 9
– 0 , 0 0 0 0 0 0 0 0 0 1 1 3 4 9 3 8 4 9 9 1 3 , 6 9 9 5 8 0 0 4 2 3 0 5 5 0 6 1 5 0 1 Résultat à comparer avec celui qu’on a obtenu avec WIMS :
13,699580042305528321963895496730411108319299879385 qui montre qu’un chiffre significatif supplémentaire a été récupéré !
4. Résoudre une équation du second degré dans les réels
Évidemment, la calculatrice dispose d’outils qui donnent des résultats satisfaisants. Toutefois, l’algorithme est si classique et si simple à mettre en œuvre sur une calculatrice qu’on est souvent amené à l’aborder avec des élèves.
On considère donc l’équation ax2bx c 0 avec a, b et c réels, a0, que l’on cherche à résoudre de manière approchée.
4.1 La méthode naturelle
La méthode semble couler de source et ne poser aucun problème : les coefficients de l’équation peuvent être passés comme paramètres d’entrée de la fonction ; on calcule ensuite le discriminant, dont on teste le signe, avant de renvoyer les différents résultats, par exemple dans une liste.
C’est ce que fait la fonction suivante :
Remarquons qu’on divise non pas par 2, mais par 2., pour être sûr que le résultat renvoyé, s’il existe, soit approché.
Les résultats obtenus semblent être conforme à nos attentes :
4.2 Vers une fonction plus performante
Sans précautions particulières, les problèmes ont toutes les chances de survenir. Par exemple, si l’on cherche à résoudre 108x28x108 0 :
La deuxième solution, 0, interroge. Tout d’abord 0 n’est pas solution de cette équation. Enfin si la solution est un nombre proche de 0, ce que l’on veut bien admettre, pourquoi la calculatrice ne parvient-elle pas à l’exprimer ?
Il faut examiner de plus près ce qui se passe. La variable d de la fonction contient en mode approché juste b2 = 0,64 car –4ac = 4 1016 ne peut pas être pris en compte sur les 14 chiffres que gère la TI-Nspire. Par conséquent :
8
0,8 0,8
80 000 000
2 2 10
b d
a , une des valeurs renvoyées…
… mais aussi 0,8 0,88
2 2 10 0
b d
a
…
On reconnaît là une différence évanescente, différence de deux nombres tellement voisins qu’ils sont égaux pour la calculatrice et que tous les chiffres significatifs disparaissent.
Le remède est simple : il faut éviter de faire la soustraction fautive. C’est possible car, dans les formules de résolution d’une équation du second degré, l’une met en œuvre une addition et l’autre une soustraction. Si la soustraction doit être évitée, on peut s’appuyer sur le fait que le produit des racines d’une telle équation, quand elles existent, vaut c
a : dès que l’une, x’, est connue, on peut facilement déduire l’autre sans soustraction, c’est
' c ax .
Nous voilà donc amenés à tester dans la fonction le signe de b : si b0, on doit calculer '
2
b d
x a
et '' ' x c
ax … c’est bien une somme sur les valeurs absolues qui est faite…
si b0, on doit calculer ' 2
b d
x a
et '' ' x c
ax … c’est bien une somme qui est faite…
Exit la différence à problème…
Pour résumer, on peut travailler avec une variable e, valant 1 lorsque b > 0, –1 si b < 0 et 0 si b = 0.
Les formules précédentes se résument en :
' 2
b e d
x a
et '' ' x c
ax .
La fonction peut alors être la suivante : elle est certes moins immédiate, mais bien plus performante ! On utilise la fonction sign de la TI-Nspire : attention à ce qu’elle renvoie pour 0…
Remarquons que la solution x1 ne peut pas être nulle : comme somme de deux nombres de même signe, elle est nulle si et seulement si chacun des nombres –b et e d l’est, ce qui suppose b nul et d nul… mais on est alors dans le cas où le trinôme possède une racine double.
Les résultats sont les mêmes pour les équations « classiques », fort heureusement, mais bien plus satisfaisant pour notre équation problématique :
La solution proche de 0 que nous pressentions est 1,25 10-8… qui n’est pas vraiment 0 et tout à fait représentable par les puissances de 10 de notre calculatrice !
Remarquons que la fonction Solve de la calculatrice a un comportement excellent sur ce problème :
BILAN : autour de l’ensemble des nombres calculatrice
C’est l’ensemble qui a la « prétention » sur une calculatrice de remplacer l’ensemble des nombres réels : il y réussit bien souvent (les outils de calcul électroniques sont devenus indispensables en mathématiques) mais il vaut mieux savoir que des problèmes peuvent se poser.
Nous reprenons ci-après quelques-unes des propriétés déjà rencontrées, qui distinguent cet ensemble
de l’ensemble des nombres réels.
Tout d’abord, nous avons remarqué que était une partie finie et totalement ordonnée de : à ce titre, il possède un plus grand élément et un plus petit élément strictement positif ; chaque élément, hormis les deux extrêmes, possède un successeur et un prédécesseur.
Une calculatrice est donc bien loin de pouvoir représenter l’intégralité des nombres réels, même pas d’ailleurs l’intégralité des nombres décimaux.
Les propriétés usuelles des calculs dans ne sont pas conservées.
Par exemple l’associativité de l’addition n’est plus vraie en général. Ainsi si l’on considère les deux expressions suivantes, mathématiquement égales du fait de l’associativité de l’addition dans :
u = (y + x) – x v = y + (x – x)
elles peuvent différer pour une calculatrice. Avec x = 1 et y = 10–15, on obtient : u = (10–15 + 1) – 1 = 1 – 1 = 0
v = 10–15 + (1 – 1) = 10–15
La différence certes peut paraître faible, mais elle n’en est pas moins gênante si l’on poursuit les calculs : en divisant par y,
y x
xy
et y
x x
y
, on trouve respectivement 0 et 1...
L’addition n’est plus régulière. En effet, dans , a + x = b + x entraîne a = b. Avec une calculatrice, on a 1 + 10-30 = 1 + 0 : pourtant 10-30 0.
Plus étonnant mais cela montre bien les différences avec l’ensemble des réels : sur une calculatrice, une série dont le terme général tend vers 0 est convergente. En effet si le terme général tend vers 0, pour une valeur suffisamment grande de n, il sera égal à 0 car on ne peut pas s’approcher indéfiniment de 0 sur un ensemble discret. Par exemple, sur une TI-Nspire, la série harmonique est « convergente » et, pire encore, la limite trouvée dépend de l’ordre des calculs.
Bref dans les calculs, il faut être prudent comme on l’a remarqué à plusieurs reprises. D’autant plus que, dans un programme par exemple, ce n’est pas un mais des dizaines voire des centaines d’opérations qui sont enchaînées... Les erreurs d’affectation initiales, les erreurs d’arrondi d’un calcul particulier vont alors se trouver ballotées au fil du programme : elles étaient petites, elles vont grossir un peu, parfois exagérément au point de masquer le calcul que l’on fait20…
La ligne de conduite lors de tout calcul se résume à cette technique : il est absolument essentiel de conserver le plus possible le maximum de chiffres significatifs. Pour ce faire, quelques lignes directrices à ne pas perdre de vue. On doit :
bannir les soustractions dans un calcul, partout où c’est mathématiquement possible, pour éviter le phénomène des différences évanescentes ;
20 Par exemple dans le cas d’Alfred Logarithme (voir chapitre suivant), une erreur très petite, de l’ordre de 10–14 se trouve multipliée par un nombre très grand (25! de l’ordre de 1025) et fausse complètement le résultat final en 25 étapes...