Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article doit être recyclé (octobre 2020). Une réorganisation et une clarification du contenu paraissent nécessaires. Améliorez-le, discutez des points à améliorer ou précisez les sections à recycler en utilisant ((section à recycler)).
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne cite pas suffisamment ses sources (septembre 2013). Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ». En pratique : Quelles sources sont attendues ? Comment ajouter mes sources ?

La formule BBP (ou formule de Bailey-Borwein-Plouffe) permet de calculer le n-ième chiffre après la virgule du nombre π en base 2 (ou 16) sans avoir à en calculer les précédents, et en utilisant très peu de mémoire et de temps. Elle a été obtenue le par Simon Plouffe en collaboration avec David H. Bailey et Peter Borwein[1].

La formule

[modifier | modifier le code]

Dans sa forme originelle, la formule BBP est donnée par

.

Exploitation de la formule pour calculer les chiffres après la virgule de π

[modifier | modifier le code]
Article détaillé : Approximation de π.

Le but est de calculer le N-ième chiffre après la virgule de π en base 16.

Déjà, on remarque que le (N + 1)-ième chiffre après la virgule de π en base 16 est le même que le 1er chiffre après la virgule de 16Nπ. En effet, comme en base 10, multiplier un nombre en base 16 par 16 permet de décaler la virgule d'un rang vers la droite. En multipliant un nombre par 16N, la virgule est donc décalée de N rangs vers la droite. Ainsi, il suffit de calculer le premier chiffre de 16Nπ, égal par la formule BBP à :

.

Mais calculer les premiers chiffres derrière la virgule de ce nombre n'est pas si simple, pour deux raisons :

Posons . Le calcul des premiers chiffres de SN(a) permettra d'obtenir ceux de 16Nπ, par la relation :

.

Découpons la somme SN(a) en deux :

et calculons AN(a) et BN(a) indépendamment.

Calcul de BN(a)

[modifier | modifier le code]

Bien que ce soit une somme infinie, ce terme est très simple à calculer, car on remarque que ses termes deviennent vite très petits et on ne cherche que les premiers chiffres.

.

Finalement, la somme BN(a) est de la forme (au pire) :

Donc pour obtenir BN(a) avec une précision de P chiffres derrière la virgule, il suffit de calculer les P premiers termes de la somme, plus les quelques suivants pour éviter les problèmes de retenues qui peuvent éventuellement apparaître.

Il suffit donc de calculer :

Cette somme n'étant composée que d'un petit nombre de termes (de nombre constant), son temps de calcul est négligeable pour un ordinateur.

Calcul de AN(a)

[modifier | modifier le code]

Le problème pour calculer AN(a) est que les premiers termes sont extrêmement grands (N chiffres en base 16 devant la virgule). Néanmoins, comme on ne cherche que les premiers chiffres derrière la virgule, peu importe la partie entière, aussi grande qu'elle soit. On peut donc s'en « débarrasser » en utilisant l'arithmétique modulaire.

Toute la difficulté se réduit donc à trouver la partie fractionnelle de .

Pour cela, on effectue la division euclidienne de 16N-k par 8k+a :

Donc

est inférieur à 1, donc c'est la partie fractionnelle de .

Et

Il suffit donc de calculer : .

En utilisant la méthode d'exponentiation rapide, 16N-kmod (8k+a) se calcule rapidement (temps d'exécution en O(log2(N-k)).

Conclusion

[modifier | modifier le code]

Finalement, pour obtenir les premiers chiffres de π en base 16 (ou 2), il faut calculer les premiers chiffres de :

avec .

Complexité de cette méthode

[modifier | modifier le code]

Pour calculer le n-ième chiffre après la virgule de π en base 16 (et donc le 4n-ième chiffre en base 2) :

Complexité temporelle

[modifier | modifier le code]

Complexité spatiale

[modifier | modifier le code]

Le calcul de BN'(a) s'effectue en espace constant (somme d'un nombre fixé de termes, avec un nombre fixé de chiffres significatifs). Le calcul de AN'(a) nécessite d'effectuer des calculs modulo 8k+a, c'est-à-dire de manipuler des nombres de taille log(k) avec kN. À chaque étape de l'algorithme, on manipule un nombre constant de tels nombres : la complexité en espace du calcul de AN'(a) est donc O(log(n)). L'algorithme total utilise donc un espace logarithmique.

Formules dérivées

[modifier | modifier le code]

Simon Plouffe

[modifier | modifier le code]

Formule originale :

Viktor Adamchick et Stan Wagon (1997)

[modifier | modifier le code]
.

Fabrice Bellard

[modifier | modifier le code]
.

Géry Huvent (2001)

[modifier | modifier le code]
[2].

Les records

[modifier | modifier le code]

Pour comparaison, le record de calcul de toutes les décimales de π est, en 2016, de 22 600 milliards de décimales (soit environ 70 000 milliards de chiffres binaires).

Calcul en base 10

[modifier | modifier le code]

Actuellement, aucune formule réellement efficace n'a été découverte pour calculer le n-ième chiffre de π en base 10. Simon Plouffe a mis au point en décembre 1996, à partir d'une très ancienne série de calcul de π basée sur les coefficients du binôme de Newton, une méthode pour calculer les chiffres en base 10, mais sa complexité en O(n3 × log2(n)) la rendait en pratique inutilisable. Fabrice Bellard a bien amélioré l'algorithme pour atteindre une complexité en O(n2), mais cela n'est pas suffisant pour concurrencer les méthodes classiques de calcul de toutes les décimales.

Références

[modifier | modifier le code]
  1. (en) David H. Bailey, Peter B. Borwein et Simon Plouffe, « On the Rapid Computation of Various Polylogarithmic Constants », Math. Comp., vol. 66, no 218,‎ , p. 903-913 (DOI 10.1090/S0025-5718-97-00856-9, MR 1415794).
  2. Géry Huvent, « Formules BBP », .

Bibliographie

[modifier | modifier le code]

Lien externe

[modifier | modifier le code]

(en) Eric W. Weisstein, « BBP Formula », sur MathWorld