Donc à 10000 on va ajouter la valeur 1/10000 10000times. Logiquement, cela donne 10001. Cependant, en raison d'un maculage, cela ne résulte pas de limitations de stockage. Le résultat est 10000.999999992928. je trouve où le maculage se produit, qui est la deuxième addition:Arithmétique de la machine et Smearing: ajout d'un petit nombre
1: 10000.0001
2: 10000.000199999999
3: 10000.000299999998
4: 10000.000399999997
etc...
Cependant, saisir pourquoi le maculage a eu lieu est l'endroit où se trouve la lutte. J'écrit le code pour générer des nombres binaires à virgule flottante pour voir si maculage a eu lieu ici
So 10000 = 10011100010000 or 1.001110001*10**13 while
0.0001= 0.00000000000001101001 or
1.1010001101101110001011101011000111000100001100101101*2**(-14)
then 10000.0001 = 10011100010000.00000000000001101001
Maintenant, le maculage se produit dans la prochaine addition. Cela a-t-il un rapport avec la taille de la mantisse? Pourquoi cela se produit-il seulement dans cette étape? Juste intéressé de savoir. Je vais d'abord ajouter tout le 1/10000 puis l'ajouter au 10000 pour éviter les smaings.
Vous feriez peut-être mieux de trouver un bon guide général pour les représentations en virgule flottante. Je recommande [* Ce que tout scientifique informatique devrait savoir à propos de l'arithmétique en virgule flottante * par David Goldberg] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html), ou, pour un trajet plus doux, le site web de [* Floating-Point Guide * (http://floating-point-gui.de/). –