Calcul incorrect à cause de la précision

Bonjour,

Auriez-vous un exemple de calcul mêlant additions et multiplications qui donne un résultat totalement faux quand on l'effectue dans un ordinateur, avec des nombres "double" ? Le but est d'illustrer un type de nombres avec précision arbitraire.

Réponses

  • Avec la recherche "erreur arrondi bourse float" sur Google, j'obtiens par exemple https://www.math.univ-paris13.fr/~japhet/Doc/Handouts/RoundOffErrors.pdf
  • Merci, mais je n'ai que l'addition/soustraction et la multiplication/division, pas de sinus, pas de racine carrée, rien d'autre.
  • Bonjour. 

    Sur les calculettes, je donnais 
    (1+10^20)-10^20
    dont le résultat est faussement 0. À adapter. 

    Cordialement. 
  • Il y a aussi le classique $u_0=\frac{1}{7},$ $u_{n+1}=8u_n-1$ (suite constante égale à $\frac{1}{7}$). Le calcul des 40 premiers termes avec un tableur est assez éloquent.
  • @Rebellin
    Impressionnant.
    On peut ajouter 2 colonnes dans le tableur :  $v_n = u_n-u_{n+1}$
    Et $w_n = \dfrac {v_{n+1} }{ v_n}$

    Et on constate que cette suite $w_n$ est constante, égale à $8$.

    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
    L'hypocrisie est pire qu'une vérité qui fait mal. Franck Ntasamara.
  • Médiat_Suprème
    Modifié (November 2022)
    Un exemple que j'aime bien : 


    $\begin{array}{rcl}
    u_0     & = &4\\
    u_1     & = &\dfrac{17}{4}\\
    u_{n+1} & = &108 - \dfrac{815 - \frac{1500}{u_{n-1} }}{u_n} \\
    \end{array}$


    Calculé avec 38 décimales (les tableurs c'est de l'ordre de 15 ou 16)

    $u_{62}=99.99999999999999999999999999999999999995$
    et pour $n >62, u_n = 100$ alors qu'il est facile de montrer que la limite de $u_n$ est 5 (on peut exprimer $u_n$ en fonction de $n$)


    Pire : 
    Autre exemple (calculs faits avec un tableur) :

    $(10000003 + (-10000000)) + 7,501 = 10,501 $
    $10000003 + ((-10000000) + 7,501) = 10,5010000001639 $

    Autrement dit, l'addition des réels dans ce tableur n'est pas associative !
    Il ne faut pas respirer la compote, ça fait tousser.

    J'affirme péremptoirement que toute affirmation péremptoire est fausse
  • Génial, merci. Je vais prendre l'exemple de la suite constante.
  • On a aussi comme pour l’exemple de Gérard : $1+10^{-20}$ qui renvoie  $1$. 

    J’ai déjà posté un cliché tiré du livre du CNED pour la préparation au CAPES (il commence à dater…) qui proposait une suite et qui expliquait les erreurs.
    C’était un peu comme l’exemple de Médiat_Suprème (n’est-ce le même d’ailleurs ? je me souviens que ça convergeait de manière erronée vers $100$ également). 
  • J'avoue que je ne sais plus où j'ai trouvé cet exemple, sauf que c'était en étudiant les axiomatiques constructives.
    Il ne faut pas respirer la compote, ça fait tousser.

    J'affirme péremptoirement que toute affirmation péremptoire est fausse
  • Dom
    Dom
    Modifié (November 2022)
    J’ai retrouvé 😀
    La construction de cette suite est bien la même.


  • Le terme "erreur" ici n'est pas correct. L'ordinateur fait des calculs corrects. Le seul problème est qu'on fait des calculs avec des flottants sur la machine alors qu'on manipule des nombres réels sur le papier. Mais à proprement parler il n'y a pas d'erreur !
  • Dom
    Dom
    Modifié (November 2022)
    Zut, je ne comprends pas. 
    Il s’agit bien d’erreurs d’affichage de mon point de vue. Cependant j’utilise le terme « erreur » dans un sens courant et je ne sais pas s’il a une acception spécifique dans ce cadre. 
    Aussi je ne comprends pas quand tu dis que « l’ordinateur fait des calculs corrects ».
    Quand je demande à Google $3^{-1345}+2^{-2734}$, que fait-il de correct ? (Ce n’est pas une question piège ou rhétorique, je n’y connais fichtre rien). 
  • Ludwig
    Modifié (November 2022)
    Je ne comprends pas non plus : si l'ordinateur fait des calculs corrects, pourquoi l'affichage ne le serait-il pas ?? Ou alors c'est que la représentation flottante d'un nombre réel ne lui est pas forcément égal ? Oui, je crois que c'est ça. Alors donnons un exemple d'un nombre différent de sa représentation flottante.
  • Facile : 4/3-1/3-1/3-1/3-1/3 n'est pas égal à 0 pour un ordinateur.
    Autrement dit, les nombres (4/3-1/3-1/3-1/3) et 1/3 n'ont pas la même représentation.
  • Bonsoir,

    Pour Matlab: 4/3-1/3-1/3-1/3-1/3=1.1102e-16

    Cordialement,
    Rescassol

  • Ludwig
    Modifié (November 2022)
    Oui mais (4/3-1/3-1/3-1/3) résulte d'un calcul sur plusieurs nombres.. Et tous ces nombres ont chacun leur représentation flottante qui leur est égale non ? Alors, si l'ordinateur calcule correctement il n'y a pas de raison que le résultat soit faux ! Bon j'ai trouvé une page qui devrait éclairer :
    https://leria-info.univ-angers.fr/~jeanmichel.richer/ensl1i_base_de_l_info_1_flottants.php
  • Ben les flottants sont décimaux ! :smile:
  • 4/3-1/3-1/3-1/3-1/3 n'est pas égal à 0 pour un ordinateur.
    Autrement dit, les nombres (4/3-1/3-1/3-1/3) et 1/3 n'ont pas la même représentation.
    Ne confondons pas l'ordinateur et le programme.

    Quand le programme chargé de traiter les entrées de l'utilisateur humain représente la saisie du caractère 1 puis du caractère solidus puis du caractère 3 par un dit "flottant" afin qu'il soit traité par un programme informatique chargé de faire les calculs en utilisant directement les instructions du microprocesseur faites pour, c'est ce qui arrive.

    Si le programme chargé de traiter les entrées de l'utilisateur humain représente la saisie du caractère 1 puis du caractère solidus puis du caractère 3 par une structure de données conçue pour représenter imparfaitement un nombre rationnel et qu'il l'envoie à un programme informatique conçu pour faire des calculs simples dessus, il n'est pas sûr qu'on ait le même résultat que précédemment.


  • Le fait que les ordinateurs ne peuvent pas représenter tous les nombres réels et qu'il en résulte obligatoirement des approximations dans les calculs faits à partir de la représentation qu'ils ont des réels (sous le forme de nombre nommés "flottants") est désormais au programme du lycée.
    En théorie, "tout le monde" connaîtra cela dans quelques années.
  • Bonjour
    sur certaines calculatrices (dont la mienne ! ) (1+10^20)-10^20 renvoie bien 1 

  • Dom
    Dom
    Modifié (November 2022)
    Oui, cela dit en le faisant pas à pas, ça coince j’imagine. 
  • Bonjour,

    Pour $1+10^n-10^n$, Matlab répond $0$ à partir de $n=16$.

    Cordialement,
    Rescassol

Connectez-vous ou Inscrivez-vous pour répondre.