Les articles de Sébastien Dassule (Un exercice banal) et de Dominique Baroux (Comment un exercice peut en cacher un autre) parus respectivement dans les Chantiers de pédagogie mathématique n°156 et n°157, montrent deux exemples où la représentation des nombres par un outil électronique (calculatrice, ordinateur, etc.) peuvent entraîner quelques surprises, qui laissent perplexe si on s’en tient à ce que l’on obtient par un calcul formel.
Ces surprises, lorsqu’elles contredisent le calcul formel, est souvent qualifié de bug. Dans l’écrasante majorité des cas, il n’en est rien. Cela s’explique parfaitement lorsque l’on comprend comment fonctionne la machine.
En premier lieu, une calculatrice numérique ou un tableur (calculs en virgule flottante) ne reconnaît qu’un nombre fini de nombres, tous décimaux, et l’affichage de la courbe représentative d’une fonction continue sur un intervalle n’est qu’une juxtaposition d’un ensemble fini de points. On ne demande pas à une machine à laver le linge de laver aussi la voiture, on ne peut donc pas demander à un calculateur numérique de faire du calcul formel.
De plus, même les langages de calcul formel qui équipent certains de ces outils (Geogebra contient maintenant un registre de calcul formel, certaines calculatrices de collège savent gérer un calcul formel simple avec des racines carrées, sans parler des modèles de calculatrices formelles destinées au lycée et au post-bac …), peuvent produire certains résultats "surprenants", même si ce sont de rares exceptions.
L’un des problèmes majeurs des langages de calcul formel, pour lequel aucun d’entre eux n’est totalement infaillible, est l’identification d’une expression à 0. Un critère de qualité d’un tel langage est qu’il prévient quand il n’est pas certain de produire un résultat fiable.
Revenons aux outils de calcul en virgule flottante. Les occasions de découvrir des "curiosités" produites par ces outils sont présentes dans tous les registres : évaluations numériques, représentations graphiques, recherches d’extremums, résolutions d’équations, calculs de nombres dérivés, calculs matriciels, calculs des termes d’une suite, etc. Loin de s’en plaindre, elles sont très souvent des occasions magnifiques de faire faire des mathématiques aux élèves, les 2 articles précités en sont d’excellents exemples.
Je propose donc de créer dans notre publication, une rubrique « Vous avez dit bizarre… Comme c’est bizarre… » . L’objet est de montrer des exemples de ces "bizarreries" produites par les machines, si possible d’en expliquer la raison, et si cela s’y prête, en faire une activité pour les élèves, de tous niveaux. Je vais alimenter cette rubrique tant que je pourrai (avec l’âge, j’en ai accumulées un certain nombre assez variées, beaucoup d’ailleurs proviennent de collègues intrigués ou perspicaces). Mais bien entendu, toute contribution sera très appréciée. Je commence donc (doucement), avec une activité en seconde (les phases 1 et 2 peuvent être faites en 3e).
Objectif : Découvrir les nombres utilisés par la calculatrice.
Phase 1 : Un chiffre peut en cacher un autre…
- Taper $\sqrt{2}$, entrer. On compte 10 chiffres utilisés pour la réponse affichée.
Le dernier chiffre affiché (le 9e chiffre après la virgule) est 2.
- Taper $2\sqrt{2}$, entrer.
Le dernier chiffre est 5.
Bizarre… $2 \times 2 = 4 \neq 5 $
Manifestement, la calculatrice ne nous montre pas tout. Pour connaître les chiffres cachés :
- Taper $\sqrt{2}$, entrer.
Puis taper l’instruction : partDéc(Rép) ×10, entrer
(syntaxe TI82).
L’affichage dévoile le 10e chiffre après la virgule.
Expliquer aux élèves ce que fait cette instruction est une très bonne occasion d’introduire la notion de variable dans un algorithme.
- Appuyer alors plusieurs fois sur entrer pour dévoiler les chiffres qui suivent, jusqu’à ce que…
On peut alors expliquer la bizarrerie lors de l’affichage de $=2\sqrt{2}$, mais aussi le nombre de chiffres connus par la calculatrice, et donc ceux utilisés pour faire les calculs et les arrondis. Pour la calculatrice, $\sqrt{2}$ est un nombre décimal s’écrivant avec 14 chiffres, et égal à 1,4142135623731.
Phase 2 : Une erreur… grossière !
Soit $a = 500(10^{15}+1-10^{15})$. Calculer $a$ sans calculatrice, puis avec.
Bizarre…
Recommencer avec $b = 500(10^{12}+1-10^{12}$
Ça va mieux !
En écrivant à la main les nombres obtenus à chaque étape du calcul (une seule opération à la fois), et en faisant de même à la calculatrice, pour $a$ puis pour $b$, on obtient :
Pour a | Pour b |
1000000000000000 1000000000000001 1 500 |
1000000000000 1000000000001 1 500 |
On comprend alors pourquoi $a$ est mal évalué, et $b$ l’est correctement. La calculatrice ne peut pas écrire les nombres entiers qui ont plus de 14 chiffres.
Mais ce n’est pas fini : En principe, l’évaluation de $500(10^{13}+1-10^{13})$
devrait être correcte puisque $10^{13}$ s’écrit avec 14 chiffres, ce dont dispose la calculatrice. Et pourtant…
Manifestement, la calculatrice utilise le 14e chiffre pour arrondir le 13e, mais refuse de l’utiliser dans les calculs.
Qu’en est-il avec un tableur ?
Phase 1 : Dans les cellules A1 et A2, on a tapé, la même formule : =racine(2). Mais dans A2, on a demandé d’ajouter des décimales. On voit donc que ce tableur affiche 11 chiffres par défaut, mais en connaît 14, pas plus que la calculatrice…
Phase 2 : Les colonnes B et C permettent de voir que ce tableur produit lui aussi un résultat faux lorsque l’exposant est 15, mais correct avec un exposant égal à 14. Il a donc moins de scrupules que la calculatrice pour utiliser le 14e chiffre dans les calculs.
Phase 3 : Un algorithme mystère
Vous trouverez en téléchargement un document élève, qui était une partie d’un devoir à la maison dans une classe de seconde, ainsi que le corrigé distribué aux élèves.
La Régionale Île-de-France APMEP, 26 rue Duméril, 75013 PARIS