2022/05/02

円周率の計算:Chudnovskyの公式

Chudonovsky.knit

1 概要

チュドノフスキーアルゴリズム は、ラマヌジャン系の円周率を求める公式で \(\pi\) の桁を計算するための高速な方法です。1988年にChudnovsky兄弟によって発表され、2021年8月14日に62.8兆桁の世界記録計算に使用されました。

2 公式

\[ \displaystyle \frac{1}{\pi} = \displaystyle \frac{12}{ \sqrt{C^3}} \displaystyle \sum_{m=0}^{\infty} \frac{(-1)^m(6m)!(A+Bm)}{(3m)!(m!)^3C^{3m}} \]

\[ \begin{eqnarray} \left\{ \begin{array}{l} A=13591409 \\ B=545140134 \\ C=640320 \end{array} \right. \end{eqnarray} \]

3 Chudnovskyの公式による計算

library(Rmpfr)

chudo <- function(n, prec) {
    A <- mpfr(13591409, prec)
    B <- mpfr(545140134, prec)
    C <- mpfr(640320, prec)
    S <- mpfr(0, prec)

    for (m in 0:n) {
        mm <- mpfr(m, prec)
        f6m <- factorial(6*mm)
        f3m <- factorial(3*mm)
        fm3 <- factorial(mm)^3
        S <- S + (-1)^m * f6m * (A + B * m) / (f3m * fm3 * C^(3 * m))
    }

    return (C^(3/2) / (12 * S))
}

digit <- 150
prec <- 5 + ceiling(digit / log10(2))
ConstPi <- Const('pi', prec)

m <- 0:9
p <- sapplyMpfr(m, chudo, prec)

tibble(m, digit=-log10(as.numeric(abs(ConstPi-p)))) %>%
    ggplot() +
    aes(x=m, y=digit) +
    geom_col() +
    geom_text(aes(label=sprintf('%4.1f', digit)), color='white', vjust=1.1)

\(m\) が1進む毎に精度が約14桁上がっている。

4 参考文献

0 件のコメント:

コメントを投稿

【備忘録】時系列データの編集方法(R言語, tidyverse)

TimeSeries.knit 1 サンプルデータ作成 2 日付単位に集計する 2.1 月毎集計 2.2 四半期毎集計 ...