le programme affiche en vrai n'importe quoi :
trace des opérations (fait avec Algobox)
***Algorithme lancé***
Entrer a : 7
Entrer m : pow(31,47)
Entrer n : 13
m=1.2416511931816992e+70, a=10, m/2=6.208255965908496e+69
m=6.208255965908496e+69, a=9, m/2=3.104127982954248e+69
m=3.104127982954248e+69, a=3, m/2=1.552063991477124e+69
...
etc des paquets de valeurs fantaisistes car approchées et pas exactes de m
...
m=2.1239305544831444e+21, a=3, m/2=1.0619652772415722e+21
m=1.0619652772415722e+21, a=9, m/2=530982638620786100000
m=530982638620786100000, a=3, m/2=265491319310393050000
m=265491319310393050000, a=9, m/2=132745659655196520000
m=132745659655196520000, a=3, m/2=66372829827598260000
calcul visiblement faux puisque ça devrait donner
m=132745659655196525000
m=66372829827598260000, a=9, m/2=33186414913799130000
m=33186414913799130000, a=3, m/2=16593207456899566000
m=16593207456899566000, a=9, m/2=8296603728449783000
...
m=129634433257027860, a=3, m/2=64817216628513930
m=64817216628513930, a=9, m/2=32408608314256964
les valeurs de m ne sont des valeurs entières que à partir d'ici
les calculs suivants sont donc justes, mais à partir de valeurs fausses
m=32408608314256964, a=3, m/2=16204304157128482
m=16204304157128482, a=9, m/2=8102152078564241
m=8102152078564241,impair, r=9, m-1=8102152078564240, a=3, m/2=4051076039282120
m=4051076039282120, a=9, m/2=2025538019641060
m=2025538019641060, a=3, m/2=1012769009820530
m=1012769009820530, a=9, m/2=506384504910265
m=506384504910265,impair, r=3, m-1=506384504910264, a=3, m/2=253192252455132
m=253192252455132, a=9, m/2=126596126227566
m=126596126227566, a=3, m/2=63298063113783
m=63298063113783,impair, r=9, m-1=63298063113782, a=9, m/2=31649031556891
m=31649031556891,impair, r=3, m-1=31649031556890, a=3, m/2=15824515778445
etc (je coupe)
m=115,impair, r=3, m-1=114, a=3, m/2=57
m=57,impair, r=9, m-1=56, a=9, m/2=28
m=28, a=3, m/2=14
m=14, a=9, m/2=7
m=7,impair, r=3, m-1=6, a=3, m/2=3
m=3,impair, r=9, m-1=2, a=9, m/2=1
m=1,impair, r=3, m-1=0, a=3, m/2=0
3
***Algorithme terminé***
tous les calculs effectués du début sont totalement fantaisistes vu que les nombres traités ne sont pas des nombres entiers mais des valeurs approchées
il ne calcule en fait sincèrement que à partir du moment où ce n'est plus des valeurs approchées (en e+ quelque chose) mais des valeurs exactes (fausses vu qu'elles dérivent des valeurs approchées précédentes)
il calcule donc en fait 7^32408608314256964 seulement et encore vu que la valeur de a et de r n'est pas franchement la bonne à ce moment
de toute façon, au premier passage 31^47 étant visiblement un nombre impair on devrait passer dans le "si "
or on n'y passe pas !!
il suffit de demander 7^(31^47+1) pour voir que c'est aberrant puisque ça devrait donner 7*3 = 21 ≡ 8 [13]
alors que ça donne toujours 3 !!
si tu programmes cet algorithme avec un logiciel qui calcule avec une précision "infinie" (avec des nombres aussi grands qu'on veut = tant qu'il y a de la place sur le disque dur, en tera-octets de nos jours)
par exemple avec XCas il en serait différemment
il faut faire tous les calculs avec au moins 72 chiffres significatifs exacts pour m vu qu'il en faut 71 pour écrire la valeur exacte de 31^47, un de plus pour avoir une petite marge.
donc demander cette précision à Xcas
il fera environ 200 boucles vu que 31^47 s'écrit avec environ 200 chiffres binaires