Calcul de Pi - article un

Le point de départ

Point de départ objectif

Tout est parti des discussions animées, à la réunion hebdomadaire du club FRAUG.
L'un de nous, représenté ici par ses initiales (GB), s'était mis en tête de vérifier l'efficacité des divers microprocesseurs des ordinateurs des personnes présentes.

Comme il est porté sur les mathématiques, il a pensé à utiliser un algorithme de calcul des décimales du nombre PI, parce que, dans un tel calcul, l'efficacité du processeur est particulièrement sollicitée.

(GB) est assez fier de sa bibliothèque technique, qui, pour ce que j'en sais, est fortement orientée maths/physique/informatique. Il en a extrait une sorte de formulaire, regroupant divers algorithmes correspondant à différentes périodes de l'histoire des mathématiques - et m'en a communiqué une copie.

(GB) a aussi réalisé la programmation en C (c'est un de ses seuls travers connus :-)) et a fourni à chacun l'exécutable, mais aussi le code source... charge à chacun de comprendre le dit code.

Le substrat local

(En la circonstance, le rédacteur de ces notes.)

Après des études modestes et arrêtées assez tôt, suivies de 25 ans dans la vie active, je me suis inscrit au CNAM, en cours du soir, ce qui m'a donné l'occasion de faire une "mise à niveau mathématique". Malheureusement, ce qu'on apprend tardivement s'oublie facilement, à moins d'y revenir assez souvent...

Les notes qui suivent sont un peu le "brouillon mis au propre" de mes tentatives pour m'approprier les démarches du formulaire.

Elles seront peut-être utiles à quiconque n'a pas de formation bien construite, en ce qu'elles comportent des tâtonnements (et sûrement des erreurs...).

Formule de Gregory

Origine et contenu

Gregory en 1671.
Elle est rédigée ainsi :
PI = 4 tan-¹(1)
Ce que, après tâtonnements, je traduis ainsi :
PI = 4 * Arc tangente(1)

Calcul avec une calculatrice scientifique

La machine est une HP 28S, à notation polonaise inverse. Il suffit de frapper ceci :
1 ATAN 4 *
pour obtenir PI = 3,14159265359

Calcul avec bc

Il s'agit d'un programme de calcul en multiprécision qui s'exécute en mode console sur un ordinateur pourvu de Linux et aussi sur d'autres Unices. Il en existe une version pour Mac OS X.
Le manuel en ligne (ce qu'on appelle "man") est la seule documentation que je possède. Mais il est censé décrire toutes les opérations possibles avec bc.

Eléments nécessaires relevés dans le man

L'arc tangente en donné par la fonction :
a(nombre)
Cette fonction ne s'exécutera que si l'on charge la bibliothèque mathématique quand on lance bc. Cela se fait en ajoutant le paramètre -l. Cela donne :
bc -l
Le nombre de décimales est modifié par le paramètre :
scale=nombre

Exemples calculés réellement

Lancement sur la machine depuis ma zone personnelle :
alain@linux:~> bc -l
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.

Calcul en prenant la précision par défaut :
4*a(1)
3.14159265358979323844

Calcul avec 30 décimales :
scale=30
4*a(1)
3.141592653589793238462643383276

Calcul avec 3 décimales :
scale=3
4*a(1)
3.140

Calcul avec 100 décimales :
4*a(1)
3.141592653589793238462643383279502884197169399375105820974944592307 8164062862089986280348253421170676

La formule de Machin

Origine et contenu

Elle a été publiée par Machin en 1706.
Elle est rédigée ainsi :
PI = 16 tan-¹(1/5) - 4 tan-¹(1/239)
Ce que, après tâtonnements, je traduis ainsi :
PI = 16 * Arc tangente(1/5) - 4 * Arc tangente( 1/239)

Exemple de calcul avec bc

On commence par définir la précision à 30 décimales
scale=30
16*a(1/5)-4*a(1/239)
3.141592653589793238462643383272

Avec 100 décimales :
scale=100
16*a(1/5)-4*a(1/239)
3.141592653589793238462643383279502884197169399375105820974944592307
8164062862089986280348253421170680

Différences

Entre HP 28C et bc en précision 30

HP = 3,14159265359
bc = 3.1415926535897....

Entre les formules de Gregory et de Machin

On part de la précision 100. Plutôt que de comparer chiffre par chiffre, on effectue la différence avec bc.
Attention, il faut séparer les deux calculs par des parenthèses.
Cela donne :

(4*a(1))-(16*a(1/5)-4*a(1/239))
-.000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000004


Pour info, la valeur trouvée par (G.B.) commence par :
3.141592653589793238462643383279502884197169399375105820974944592307
8164062862089986280348253421170679821480....

Autres différences

Comparaison en introduisant davantage de précision.

Programme de (G.B.)

n=200
pi=
3.141592653589793238462643383279502884197169399375105820974944592307
81640628620899862803482534211706798214808651328230664709384460955058
22317253594081284811174502841027019385211055596446229489549303819644
28810975665933446128475648233786783165271201909145648566923460348610
45432664821339360726024914127372458700660631558817488152092096282925
40917153643678925903600113305305488204665213841469519415116094330572
70365759591953092186117381932611793105118548074462379962749567351885
752---56
temps = 3s 410ms pour 479 decimales (tconv=0ms)

Avec bc

scale=500
4*a(1)
3.141592653589793238462643383279502884197169399375105820974944592307
81640628620899862803482534211706798214808651328230664709384460955058
22317253594081284811174502841027019385211055596446229489549303819644
28810975665933446128475648233786783165271201909145648566923460348610
45432664821339360726024914127372458700660631558817488152092096282925
40917153643678925903600113305305488204665213841469519415116094330572
70365759591953092186117381932611793105118548074462379962749567351885
752---72489122793818301194912

16*a(1/5)-4*a(1/239)
3.141592653589793238462643383279502884197169399375105820974944592307
81640628620899862803482534211706798214808651328230664709384460955058
22317253594081284811174502841027019385211055596446229489549303819644
28810975665933446128475648233786783165271201909145648566923460348610
45432664821339360726024914127372458700660631558817488152092096282925
40917153643678925903600113305305488204665213841469519415116094330572
70365759591953092186117381932611793105118548074462379962749567351885
752---72489122793818301194916

A suivre...

Réagir :lerautal