Article de reference

Algorithme de Chudnovsky

L' algorithme de Chudnovsky est une méthode rapide de calcul des chiffres de π , basée sur les formules de π de Ramanujan . Publié par les frères Chudnovsky en 1988, il a été ut...

L' algorithme de Chudnovsky est une méthode rapide de calcul des chiffres de π , basée sur les formules de π de Ramanujan . Publié par les frères Chudnovsky en 1988, il a été utilisé pour calculer π à un milliard de décimales.

Il a été utilisé dans les calculs du record du monde de 2,7 billions de chiffres de π en décembre 2009, 10 billions de chiffres en octobre 2011, 22,4 billions de chiffres en novembre 2016, 31,4 billions de chiffres en septembre 2018-janvier 2019, 50 billions de chiffres le 29 janvier 2020, 62,8 billions de chiffres le 14 août 2021, 100 billions de chiffres le 21 mars 2022, 105 billions de chiffres le 14 mars 2024, et 202 billions de chiffres le 28 juin 2024.

Algorithme

L'algorithme est basé sur le nombre de Heegner nié , la fonction j et sur la série hypergéométrique généralisée rapidement convergente suivante : Une preuve détaillée de cette formule peut être trouvée ici :


Cette identité est similaire à certaines formules de Ramanujan impliquant π , et est un exemple d'une série de Ramanujan–Sato .

La complexité temporelle de l'algorithme est de .

Optimisations

La technique d'optimisation utilisée pour les calculs du record du monde est appelée fractionnement binaire .

Division binaire

Un facteur de peut être retiré de la somme et simplifié en


Soit , et substituez-le dans la somme.


peut être simplifié en , donc

d'après la définition originale de , donc

Cette définition de n'est pas définie pour , donc calculez le premier terme de la somme et utilisez la nouvelle définition de

Soit et , donc

Laisser et

ne peut jamais être calculé, donc à la place, calculez et à mesure que l'on approche , l' approximation s'améliorera.

D'après la définition originale de ,

Calculer les fonctions de manière récursive

Considérons une valeur telle que

Cas de base pour la récursivité

Considérer

Code Python

#Remarque : pour les calculs extrêmes, un autre code peut être utilisé pour s'exécuter sur un GPU, ce qui est beaucoup plus rapide que celui-ci.
importer 
décimal
définition de 
binary_split ( a , 
b ):
si 
b 
== 
a 
+ 
1 :
Pab 
= 
- ( 6 * une 
- 
5 ) * ( 2 * une 
- 
1 ) * ( 6 * une 
- 
1 )
Qab 
= 
10939058860032000 
* 
a ** 3
Rab 
= 
Pab 
* 
( 545140134 * a 
+ 
13591409 )
autre :
m 
= 
( a 
+ 
b ) 
// 
2
Pam , 
Qam , 
Ram 
= 
fractionnement_binaire ( a , 
m )
Pmb , 
Qmb , 
Rmb 
= 
fractionnement_binaire ( m , 
b )
Pab 
= 
Pam 
* 
Pmb
Qab 
= 
Qam 
* 
Qmb
Rab 
= 
Qmb 
* 
Ram 
+ 
Pam 
* 
Rmb
retour 
Pab , 
Qab , 
Rab
déf 
chudnovsky ( n ):
« Algorithme de Chudnovsky »
P1n , 
Q1n , 
R1n 
= 
fractionnement_binaire ( 1 , 
n )
retour 
( 426880 
* 
décimal . Décimal ( 10005 ) . sqrt ( ) 
* 
Q1n ) 
/ 
( 13591409 * Q1n 
+ 
R1n )
imprimer ( f "1 = { chudnovsky ( 2 ) } " ) 
# 3.141592653589793238462643384
decimal . getcontext () . prec 
= 
100 
# nombre de chiffres de précision décimale
pour 
n 
dans 
la plage ( 2 , 10 ) :
print ( f " { n } = { chudnovsky ( n ) } " ) 
# 3.14159265358979323846264338...

Remarques

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index