A specialization of the general formula that has produced many results is: : P(s, b, m, A) = \sum_{k=0}^{\infty}\left[\frac{1}{b^k} \sum_{j=1}^m \frac{a_j}{(mk+j)^s} \right], where
s,
b, and
m are integers, and A = (a_1, a_2, \dots, a_m) is a
sequence of integers. The
P function leads to a compact notation for some solutions. For example, the original BBP formula: : \pi = \sum_{k = 0}^{\infty}\left[\frac{1}{16^k} \left(\frac{4}{8k+1}-\frac{2}{8k+4}-\frac{1}{8k + 5}-\frac{1}{8k+6}\right)\right] can be written as: : \pi = P\bigl(1, 16, 8, (4, 0, 0, -2, -1, -1, 0, 0) \bigr).
Previously known BBP-type formulae Some of the simplest formulae of this type that were well known before BBP and for which the
P function leads to a compact notation, are: : \begin{align} \ln\frac{10}{9} &= \frac{1}{10} + \frac{1}{200} + \frac{1}{3\ 000} + \frac{1}{40\,000} + \frac{1}{500\,000} + \cdots \\ &= \sum_{k=1}^\infty \frac{1}{10^k \cdot k} = \frac{1}{10} \sum_{k=0}^\infty \left[ \frac{1}{10^k} \left( \frac{1}{k+1} \right) \right] \\ &= \frac{1}{10} P\bigl(1, 10, 1, (1) \bigr), \end{align} : \begin{align} \ln 2 &= \frac{1}{2} + \frac{1}{2 \cdot 2^2} + \frac{1}{3 \cdot 2^3} + \frac{1}{4 \cdot 2^4} + \frac{1}{5 \cdot 2^5} + \cdots \\ &= \sum_{k=1}^\infty \frac{1}{2^k \cdot k} = \frac{1}{2} \sum_{k=0}^\infty \left[ \frac{1}{2^k} \left( \frac{1}{k + 1} \right) \right] \\ &= \frac{1}{2} P\bigl( 1, 2, 1, (1) \bigr). \end{align} (In fact, this identity holds true for
a > 1: :\ln\frac{a}{a-1} = \sum_{k=1}^\infty \frac{1}{a^k \cdot k}.) Plouffe was also inspired by the
arctan power series of the form (the
P notation can be also generalized to the case where
b is not an integer): : \begin{align} \arctan\frac{1}{b} &= \frac{1}{b} - \frac{1}{b^3 3} + \frac{1}{b^5 5} - \frac{1}{b^7 7} + \frac{1}{b^9 9} + \cdots \\ &= \sum_{k=1}^\infty \left[ \frac{1}{b^{k}} \frac{\sin\frac{k\pi}{2}}{k} \right] = \frac{1}{b} \sum_{k=0}^\infty \left[ \frac{1}{b^{4k}} \left( \frac{1}{4k+1} + \frac{-b^{-2}}{4k+3} \right) \right] \\ &= \frac{1}{b} P\left( 1, b^4, 4, \left(1, 0, -b^{-2}, 0\right) \right). \end{align}
The search for new equalities Using the
P function mentioned above, the simplest known formula for is for
s = 1, but
m > 1. Many now-discovered formulae are known for
b as an exponent of 2 or 3 and
m as an exponent of 2 or it some other factor-rich value, but where several of the terms of sequence
A are zero. The discovery of these formulae involves a computer search for such linear combinations after computing the individual sums. The search procedure consists of choosing a range of parameter values for
s,
b, and
m, evaluating the sums out to many digits, and then using an
integer relation-finding algorithm (typically
Helaman Ferguson's
PSLQ algorithm) to find a sequence
A that adds up those intermediate sums to a well-known constant or perhaps to zero.
The BBP formula for The original BBP summation formula was found in 1995 by Plouffe using
PSLQ. It is also representable using the
P function: : \begin{align} \pi &= \sum_{k = 0}^\infty \left[ \frac{1}{16^k} \left( \frac{4}{8k + 1} - \frac{2}{8k + 4} - \frac{1}{8k + 5} - \frac{1}{8k + 6} \right) \right] \\ &= P\bigl( 1, 16, 8, (4, 0, 0, -2, -1, -1, 0, 0) \bigr), \end{align} which also reduces to this equivalent ratio of two polynomials: : \pi = \sum_{k = 0}^\infty \left[ \frac{1}{16^k} \left( \frac{120k^2 + 151k + 47}{512k^4 + 1024k^3 + 712k^2 + 194k + 15} \right) \right]. This formula has been shown through a fairly simple proof to equal .
BBP digit-extraction algorithm for We would like to define a formula that returns the (n + 1)-th (with n \geq 0)
hexadecimal digit of . A few manipulations are required to implement a
spigot algorithm using this formula. We must first rewrite the formula as: : \pi = 4 \sum_{k=0}^\infty \frac{1}{\left(16^k\right)(8k+1)} - 2 \sum_{k=0}^\infty \frac{1}{\left(16^k\right)(8k+4)} - \sum_{k=0}^\infty \frac{1}{\left(16^k\right)(8k+5)} - \sum_{k=0}^\infty \frac{1}{\left(16^k\right)(8k+6)}. Now, for a particular value of
n and taking the first sum, we split the
sum to
infinity across the
nth term: : \sum_{k=0}^\infty \frac{1}{\left(16^k\right)(8k+1)} = \sum_{k=0}^n \frac{1}{\left(16^k\right)(8k+1)} + \sum_{k=n+1}^\infty \frac{1}{\left(16^k\right)(8k+1)}. We now multiply by 16
n, so that the hexadecimal point (the divide between fractional and integer parts of the number) shifts (or remains, if
n = 0) to the left of the
(n+1)-th fractional digit: : \sum_{k=0}^\infty \frac{16^{n-k}}{8k+1} = \sum_{k=0}^n \frac{16^{n-k}}{8k+1} + \sum_{k=n+1}^\infty \frac{16^{n-k}}{8k+1}. Since we only care about the fractional part of the sum, we look at our two terms and realise that only the first sum contains terms with an integer part; conversely, the second sum doesn't contain terms with an integer part, since the numerator can never be larger than the denominator for
k >
n. Therefore, we need a trick to remove the integer parts, that we don't need, from the terms of the first sum, in order to speed up and increase the precision of the calculations. That trick is to reduce modulo 8
k + 1. Our first sum (out of four) to compute the fractional part then becomes: : \sum_{k=0}^n \frac{16^{n-k} \bmod (8k+1)}{8k+1} + \sum_{k=n+1}^\infty \frac{16^{n-k}}{8k+1}. Notice how the
modulus operator always guarantees that only the fractional parts of the terms of the first sum will be kept. To calculate 16
n−
k mod (8
k + 1) quickly and efficiently, the
modular exponentiation algorithm is done at the same loop level, not
nested. When its running 16
x product becomes greater than one, the modulus is taken, just as for the running total in each sum. Now to complete the calculation, this must be applied to each of the four sums in turn. Once this is done, the four summations are put back into the sum to : : 4 \Sigma_1 - 2 \Sigma_2 - \Sigma_3 - \Sigma_4. Since only the fractional part is accurate, extracting the wanted digit requires that one removes the integer part of the final sum, multiplies it by 16 and keeps the integer part to "skim off" the hexadecimal digit at the desired position (in theory, the next few digits up to the accuracy of the calculations used would also be accurate). This process is similar to performing
long multiplication, but only having to perform the summation of some middle columns. While there are some
carries that are not counted, computers usually perform arithmetic for many bits (32 or 64) and round, and we are only interested in the most significant digit(s). There is a possibility that a particular computation will be akin to failing to add a small number (e.g. 1) to the number 999999999999999, and that the error will propagate to the most significant digit. == BBP compared to other methods of computing ==