π的计算公式

1. BBP(贝利-波尔温-普劳夫)公式

π=k=0116k(48k+128k+418k+518k+6)\begin{array}{c} \pi = \sum_{k=0}^\infty{1 \over 16^k}({4 \over {8k + 1}} - {2 \over {8k + 4}} - {1 \over {8k + 5}} - {1 \over {8k + 6}}) \end{array}

该公式给出了一个求 π{\pi} 在十六进制下小数点后第 n+1{n+1} 位数值位的算法,实现步骤如下:

  • 对公式中的每一项进行拆分,拆成 nn 之前和 nn 之后两部分。
  • 以公式中第一项为例:

k=0116k(8k+1)=k=0n116k(8k+1)+k=n+1116k(8k+1)\begin{array}{c} \sum_{k=0}^\infty{1 \over {16^k(8k + 1)}} = \sum_{k=0}^n{1 \over {16^k(8k + 1)}} + \sum_{k=n+1}^\infty{1 \over {16^k(8k + 1)}} \end{array}

等式两边同时乘以 16n{16^n},使小数点恰好落在第 nn 位。

k=016nk8k+1=k=0n16nk8k+1+k=n+116nk8k+1\begin{array}{c} \sum_{k=0}^\infty{16^{n-k} \over {8k + 1}} = \sum_{k=0}^n{16^{n-k} \over {8k + 1}} + \sum_{k=n+1}^\infty{16^{n-k} \over {8k + 1}} \end{array}

由于我们只关心小数部分,而该式子的右边只有第一项会出现整数部分,故需要将第一项去除整数部分:

k=0n16nk mod 8k+18k+1+k=n+116nk8k+1\begin{array}{c} \sum_{k=0}^n{16^{n-k} \ mod \ 8k+1 \over {8k + 1}} + \sum_{k=n+1}^\infty{16^{n-k} \over {8k + 1}} \end{array}

从而将小数部分的和保留了下来,记为 1{\sum_1}

  • 对公式中的其他项采取相同的处理办法,分别记为 2{\sum_2}3{\sum_3}4{\sum_4},则最终求出 π{\pi} 在十六进制下小数点后第 n+1{n+1} 数值位的数值为:

412234\begin{array}{c} \lfloor^{4\sum_1 - 2\sum_2 - \sum_3 -\sum_4}\rfloor \end{array}

【其他 BBP-Type 公式】

π=4k=0(1)k4k(2k+1)164k=0(1)k1024k(324k+1+84k+2+14k+3)\begin{array}{c} \pi = 4\sum_{k=0}^\infty{(-1)^k \over 4^k(2k + 1)} - {1 \over 64}\sum_{k=0}^\infty{(-1)^k \over 1024^k}({32 \over 4k+1} + {8 \over 4k+2} + {1 \over 4k+3}) \end{array}

BBP 和 BBP-Type 公式的意义在于它们可以求 π{\pi} 小数点后任意位的数字,而不需要求出该位前的所有位小数。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!