bernouilli92 a écrit : ↑11 sept. 2018 15:05
[…]
On reste dans le domaine de calcul des calculatrices, on multiplie deux nombres, un avec un très grand exposant et un autre avec un exposant tout petit. Et obtient des nombres proches, on peut les additionner sans trop de perte de précision.
[...]
Vérifions ensemble cela :
Adaptons donc notre problème aux termes de cette formule providentielle :
Ce n'a pas été évident pour moi à la première lecture, mais l'astuce est que le
(1+x) est en fait notre
1.0000001 c'est à dire que
x = 0.0000001.
D'autre part, nous souhaitons mettre à la puissance
α = 2^27 = 134'217'728
Il nous faut tout de même une bonne calculatrice, on va boucler plus de 134 millions de fois. J'envisageai de le faire sur mon HP-41C ou mon SHARP PC-1211.
Ce qui m'inquiète le plus dans cette somme est qu'il y a plusieurs centaines de millions de termes qui paraissent insignifiants et qui ne seront pas pris en compte si on les ajoute dans le mauvais ordre. En effet, si la somme déjà accumulée fait dans les 7 chiffres avant la virgule, un terme plus faible que 10^-3 sera négligé.
Mais comme il y en a des centaines de millions, cela ne risque-t-il pas de fausser le résultat ? Et du coup le résultat donné par notre très astucieux ami
bernouilli ne risque-t-il pas d'être le même que celui donné par le calcul direct (basé sur les LN et EXP) car il fait en fait la même erreur d'arrondi en négligeant l'effet du demi milliard de décimales situées loin à droite après la virgule ?
Voyons s'il y a un moyen de limiter la casse !
Code : Tout sélectionner
1 A=2^27 , N=0, X =1,S=0
2 S=S+X : PAUSE N : PRINT X,S
3 N=N+1, X=X*(A-N)/€7N : GOTO 2
Où faut-il s'arrêter ? Sous-entendu que l'on ira pas jusqu'à
n = α mais que l'on veut obtenir un résultat dont les décimales s'approche le plus possible de ce que l'on aurait si l'on avait fait le calcul avec .93 milliards de chiffres.
Code : Tout sélectionner
0: 1. 1.
1: 13.4217727 14.4217727 26: 521.7191688 674044.5329
2: 90.07199053 104.4937632 27: 259.3479533 674303.8809
3: 402.9752552 507.4690184 28: 124.3181635 674428.1991
4: 1352.16054 1859.629558 29: 57.53688913 674485.736
5: 3629.678176 5489.307734 30: 25.7415627 674511.4776
6: 8119.452273 13608.76001 31: 11.14507504 674522.6227
7: 15568.20543 29176.96544 32: 4.674582168 674527.2973
8: 26119.11297 55296.07841 33: 1.901247405 674529.1985
9: 38951.64183 94247.72024 34: .750532 674529.949
10: 52280.00479 146527.725 35: .287813 674530.2368
11: 63790.02625 210317.7513 36: .107304 674530.3441
12: 71347.93022 281665.6815 37: .0389248 674530.383
13: 73662.73972 355328.4212 38: .0137484 674530.3967
14: 70620.31809 425948.7393 39: .00473148 674530.4014
15: 63189.9839 489138.7232 40: .00158762 674530.403
16: 53007.59413 542146.3173 41: .000519724 674530.4035
17: 41850.34088 583996.6582 42: .000166086 674530.4037
18: 31205.87175 615202.53 43: .0000518412 674530.4038
19: 22044.10849 637246.6385 44: .0000158136 674530.4038
20: 14793.54858 652040.1871 45: .00000471660 674530.4038
21: 9455.029375 661495.2165 46: .00000137619 674530.4038
22: 5768.328877 667263.5454 47: .000000393 674530.4038
23: 3366.138537 670629.6839 48: .000000109890 674530.4038
24: 1882.480774 672512.1647 49: .0000000301006 674530.4038
25: 1010.648982 673522.8137 etc.
134217728:
Il est clair que tel qu'à partir de
n=43: mon pauvre PC-1211 ne fait plus de somme, les incréments (variable X) étant trop faible par rapport à S pour son arithmétique sur 12 chiffres significatifs.
Mais, même si les incréments successifs décroissent régulièrement, il en reste (134217728-43) ce qui doit faire quelque chose de significatif et qui pourrait influencer sur la valeur des 4 premières décimales. Non ?