La formule BBP (ou Bailey-Borwein-Plouffe) permet de calculer l'énième chiffre après la virgule de π 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 19 septembre 1995 par Simon Plouffe en collaboration avec David H. Bailey et Peter Borwein.
Pour calculer le ne chiffre après la virgule de π en base 16 (et donc le 4ne chiffre en base 2):
Le calcul de Bn'(a) s'effectue en espace constant (somme d'un nombre fixé de termes, avec une 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 k ≤ N. À 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.
Le but est de calculer le Ne chiffre après la virgule de π en base 16.
Déjà, on remarque que le (N+1)e chiffre après la virgule de π en base 16 est la même que le 1re chiffre après la virgule de 16Nπ. En effet, comme en base dix, multiplier un nombre en base 16 par 16 permet de décaler la virgule d'un rang vers la droite. Donc en multipliant un nombre par 16N, la virgule est décalée de N rang vers la droite. Il « suffit » donc 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.
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.
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 arithmétique modulo.
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-k[8k+a] se calcule rapidement (temps d'exécution en O(log2(N-k)).
Au final, pour obtenir les premiers chiffres de π en base 16 (ou 2), il faut calculer les premiers chiffres de :
avec .