Calcul formel : Mode d'emploi - Exemples en Maple
Claude Gomez, Bruno Salvy, Paul Zimmermann
Masson, 1995
Chapitre I, section 2.7, exercice 1, page 32.
Philippe.Dumas@inria.fr
http://algo.inria.fr/dumas/Maple/
|
|
Comme indiqué, nous employons evalf.
> for k to 5 do
evalf(exp(Pi*sqrt(163))-262537412640768744,10*k)
od;
Le nombre est presque un entier.
> evalf(exp(Pi*sqrt(163)),50);
Si le nombre de chiffres utilisés n'est pas suffisant, la différence entre ce nombre et l'entier immédiatement supérieur ne peut être évaluée correctement. Comme la différence est de l'ordre de 10^(-12) et l'entier vaut à peu près 10^(18), il faut au moins 18+12=30 chiffres (précisément 31 chiffres) pour obtenir une valeur satisfaisante.
Invariant modulaire. Le choix du nombre n'est pas un hasard. Il s'appuie sur la théorie de l'invariant modulaire
avec si d est congru à 3 modulo 4 et si d est congru à 1 ou 2 modulo 4. L'entier d est choisi pour que j(q) soit un entier. Il en résulte que est presque un entier, l'erreur valant environ (les sont des entiers et vaut 196884). Les valeurs possibles de d figurent dans la liste ci-dessous. Dès que d est un peu grand, j(q) est très proche d'un entier.
> for d in [1,2,3,7,11,19,43,67,163] do
r:=irem(d,4);
if r=3 then q:=-exp(-Pi*sqrt(d))
elif r=1 or r=2 then q:=exp(-2*Pi*sqrt(d))
else ERROR()
fi;
jj[d]:=evalf(1/q,50);
od:
> for d in [1,2,3,7,11,19,43,67,163] do
[d,jj[d]]
od;
On constate bien le comportement attendu pour 43, 67, 163.
Ramanujan a étudié cette question [Ramanujan62, chap. 6] et Berndt en fournit un commentaire [Berndt94, chap. 23, pages 90-91]. Cohen présente cette question dans son livre [Cohen93], à la page 376.