|
Programmation
DE Calcul des décimales,
Instructions
donnant directement la valeur de Pi;
méthode
simple mais lente en Maple et
en Python;
méthodes
rapides en Maple et en Python. Extraction des décimales et leur conversion en binaire. |
Anglais: Pi value to
100 decimal places
|
||
Maple |
Python simple (15
décimales) Plus de décimale nécessite le calcul de Pi >>> |
|
|
|||
Calcul de Pi selon la formule de Gregory-Leibniz: Voir Programmation Maple |
|||
|
Commentaires La programmation la plus simple avec cette
formule. À chaque itération, on calcule deux termes et
leur différence. Ce qui évite de manipuler le signe. Résultat de
l'exécution en bleu. Avec 500 000 termes, on obtient ce piètre
résultat avec cinq décimales. D'où la recherche de méthodes
plus rapides. |
||
|
Le calcul en une seule instruction. N'offre, bien sûr, pas plus de précision. |
||
|
||
Programme simple |
Commentaires La programmation la plus simple avec
la méthode de Gregory-Leibniz. Définition de la fonction calcul de
Pi (CalPi) avec nd
termes. Le calcul progressif de Pi est mémorisé en PP.
L'alternance de signe dans la somme est matérialisée par s qui vaut alternativement 1 et -1 Résultat de
l'exécution en bleu. Avec cent millions de termes, on obtient
sept décimales en quelques minutes de calcul. |
|
Programme pour
l'exemple |
Commentaires Méthode "lente" de
Gregory-Leibniz. Mise en place d'un compteur de temps
(deux premières et deux dernières instructions). On calcule en grande précision (decimal). Compte tenu de la convergence ce mode
est totalement inutile, donné pour l'exemple d'utilisation de ce mode de
calcul en Python. Toujours du fait de la lenteur, on
demande une trace du calcul tous les 10 000 pas de calcul avec n % (qui veut dire mod)
10000 == 1. Résultat de
l'exécution en bleu. Avec 50 000 termes (100 000 / 2), on
atteint péniblement quatre décimales (résultat en jaune) en 0,13 seconde. Avec ½ milliard de termes et 8
minutes de calcul: 3,1415926515897935218 (issu du calcul) 3,1415926535897932384
(valeur de Pi) |
|
|
|||
|
Commentaires Méthode de convergence basée sur le
calcul d'un' sorte de moyenne
arithmético-géométrique. Initialisation de a (moyenne arithmétique), de b, moyenne géométrique et de p la valeur initiale donnée à Pi (ici, une valeur très proche: 2 + rac(2) =
3,4142… Chaque itération met à jour ces
moyennes. En fin de calcul, affectation des
nouvelles valeurs à ces moyennes. La convergence est extraordinaire.
Avec ces cinq itérations, on obtient 84 décimales justes. Une décimale de
plus et la quantité de décimales est doublée. Impression du résultat
de calcul 3.1415926535 8979323846
2643383279 5028841971 6939937510 5820974944 5923078164 0628620899 8630440947
|
||
a := sqrt(2); b := 0; p := 2+sqrt(2); for i to 5 do an :=
1/2*(a^(1/2)+1/a^(1/2)); bn := a^(1/2)*(b+1)/(b+a); pn := p*bn*(1+an)/(1+bn);
a := an; b := bn; p := pn end do: print(evalf(p, 100)): |
Listing pour copie dans Maple. |
||
|
||
Programme rapide
simple Avec une itération de
plus |
Commentaires Méthode identique à celle vue
ci-dessus. Note: pour le calcul de an, le logiciel
n'a pas admis ½ (---) mais a préféré (----) / 2 . J'avoue en ignorer la raison. Résultat de calcul Avec seulement cinq itérations, on a
bien les 84 décimales exactes comme ci-dessus, et cela en une fraction de
seconde. Avec six itérations, on attient 170
décimales exactes sur 200 chiffres demandés. |
|
Programme hyper rapide
(programmation avancée) Les dernières
décimales jusqu'à la 10 000e. 3,14 … |
Ce programme utilise la formule
d'Almkvist Berndt basée aussi sur le principe de la moyenne
arithmético-géométrique: Sa convergence est quadratique. Avec les 18 itérations (range 18) demandées, réalisées en une fraction
de seconde, on obtient plus de 10 000 décimales exactes (je n'ai pas testé
au-delà). Source: Rosetta
Code Dernière ligne pour comparaison
avec les données fournies par Maple avec evalf (Pi, 10000) |
|
|
||
|
Procédure nommée p
(pour Pi) demandant un entier positif n comme entrée. Calcul avec une précision égale à n (Digits:=n). Détail des calculs pas à pas et impression du
résultat. a)
suppression de la virgule avec op(1,…). b)
conversion de ce nombre en décimal; astuce pour obtenir les chiffres
dans une liste, mais à l'envers. c)
mise à l'endroit des chiffres de la liste et suppression des crochets
par op( ). En bleu, résultat de ces trois opérations. |
|
|
Il n'est pas interdit de compacter toutes ces
étapes en une seule instruction … Listing pour
copie directe dans Maple p := proc (n::posint) local a, b, c, d; Digits :=
n; c := op(ListTools:-Reverse(convert(op(1, evalf(Pi, n)), base, 10))) end
proc: p(10); |
|
|
||
Nombre Pi en binaire |
Utilisation de l'instruction de conversion en
binaire en précisant la quantité de décimales (50). Sans oublier de convertir le nombre Pi en format
flottant (evalf) avec suffisamment de
décimales. |
|
Pour obtenir 50 chiffres binaires exacts de
Pi, il faut au moins 17 décimales. |
||
Nombre Pi et ses décimales, une par une |
Procédure nommée p
(pour Pi) demandant un entier positif n comme entrée. Calcul avec une précision égale à n (Digits:=n). Détail des calculs pas à pas et impression du
résultat. d)
calcul des décimales de Pi en binaire. Ne pas oublier evalf. e)
suppression de la virgule avec op(1, b). f)
conversion de ce nombre en décimal; astuce pour obtenir les chiffres
dans une liste, mais à l'envers. g)
mise à l'endroit des chiffres de la liste et suppression des crochets
par op( ). En bleu, le résultat de ces quatre opérations. |
|
|
Il n'est pas interdit de compacter toutes ces
étapes en une seule instruction … Listing pour
copie directe dans Maple p := proc (n::posint)
op(ListTools:-Reverse(convert(op(1, convert(evalf[n](Pi), binary, n)), base,
10))) end proc: p(10); |
|
Suite PI |
Décimales de
Pi – Course aux décimales
Décimales
de Pi – Observations |
Voir |
Calcul mental –
Index
Fraction
– Glossaire
Géométrie – Index
Pi – Glossaire |
Site |
OEIS A00601 – Expansion of Pi in base 2 |
Cette page |
http://villemin.gerard.free.fr/Wwwgvmm/Geometri/PiProgra.htm
|