Quand la calculatrice nous trompe

Calcul numérique et perte de précision

a marqué ce sujet comme résolu.

Salut à tous !

Depuis quelques temps, j'avais envie d'écrire un article qui montre que le calcul sur ordinateur, c'est pas forcément aussi simple que « je tape les chiffres sur la calculatrice et je lis le résultat ». Puis tout à l'heure, je me suis souvenu d'un article intéressant (et dont j'ai perdu le lien :( ), qui partait d'un problème simple, les équations du second degré, et qui montrait que le calcul naïf était mauvais. J'ai décidé d'adopter cette démarche également, mais en étant plus accessible.

Mon article part de l'écriture d'un programme naïf pour résoudre une équation du second degré. On met le doigt sur un défaut, on identifie le problème, on le corrige. Et le lecteur apprend, j'espère, plein de chose en cours de route.

L'article se veut facile à lire, sans autre prérequis que savoir résoudre des équations du second degré. Savoir programmer est un plus.

Si je met ce contenu en bêta, c'est que j'ai besoin de votre aide à tous ! Bien que le cheminement me paraisse assez cohérent, je suis certain qu'il y a des points obscurs qui mériteraient d'être développés ; je compte sur vous pour les trouver.

Je n'ai pas du tout relu l'orthographe, ne vous fatiguez pas dessus.

+2 -0

Je ne sais pas en Python, mais Java possède des classes spéciales (BigInteger et BigDecimal) qui permettent de plus ou moins contourner ces problèmes : sous réserve de limitations (calculs beaucoup plus lents, code moins lisible, moins d'opérations disponibles), elles permettent de gérer des entiers et des flottants de longueur arbitraire (fixée mais pas infinie) et de forcer les systèmes d'arrondis à utiliser.

Si ça existe en Python, j'imagine que ça vaut le coup de les présenter.

Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l'adresse suivante :

Merci d'avance pour vos commentaires.


Alors première mise à jour :

  • un peu plus de précision (hum hum) sur le calcul avec plus de décimales,
  • une explication plus détaillée de l'annulation catastrophique,
  • des catégories plus judicieuse que celles par défaut,
  • une illustration.

@SpaceFox : J'ai pris en compte ta remarque, mais pas avec Python, parce que ce n'est pas le cœur du sujet, et que j'avais un autre outil sous la main.

+0 -0
Banni

Il y a un article Scilab is not naive qui prend cet exemple de l'équation quadratique. Il y a dans les références How do you solve a quadratic equation (Forsythe).

Au deuxième paragraphe c'est pas « le meilleur programme qu'il soit » mais « le meilleur programme qui soit ».

Article sympathique. J'ai cherché et réussi difficilement à trouver quelques fautes :

on en a que trois -> on n'en a que trois.

Ce que nous avons vu là n'est qu'une petit aperçu -> Ce que nous avons vu là n'est qu'un petit aperçu

Le problème de cette approche, est qu'il faut disposer -> Le problème de cette approche est qu'il faut disposer

Pour mettre un peu de concret derrière cet exemple, tu aurais pu ajouter des cas de la vraie vie, où ces erreurs de calculs ont eu des impacts : voir ici par exemple

J'aime bien l'article, mais je dois dire que je reste un peu sur ma faim. S'il n'y a pas de solution simple pour éviter les soustractions, et qu'on doit faire des millions de calculs, y a-t-il une solution ? Pas à ma connaissance, mais ce pourrait être pas mal de revenir dessus en conclusion.

Sinon, pour éviter les BigMachins et avoir plus de précision, on peut dans certains cas utiliser les fractions ou le calcul littérale.

Pas de point obscurs, pas de remarques particulières, mais je suis déjà familier de ce genre de problème.

+0 -0

Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l'adresse suivante :

Merci d'avance pour vos commentaires.


Mise à jour

  • Suppression de la partie « À vous de jouer ». Montrer l'annulation massive dans le calcul du discriminant est pas évidente.
  • Réecriture de l'intro et de la conclusion, ainsi que du passage sur les solutions alternatives pour calculer précisément.
  • Menues corrections tout au long du tutoriel.

@ Gabbro : J'ai essayé de prendre en compte ta remarque (voir conclusion) qu'en penses-tu ?

@elegance : J'aime bien parler des problèmes concrets, mais c'est en général assez dur d'en trouver un à la fois accessible et pertinents. Je crois bien que je vais m'en passer pour cet article.

+0 -0

@Gabbro : J'ai essayé de prendre en compte ta remarque (voir conclusion) qu'en penses-tu ?

Je trouve ça mieux. Ça ouvre correctement. :)

+0 -0
Ce sujet est verrouillé.