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
Réagir :