円周率の計算をしてみる

ふと、円周率の計算をしてみる。Wikipediaの記事 wikipedia:円周率 を参考にした。簡単な式は、

\frac{\pi}{4} = 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \frac{1}{11} + \cdots

だが、これは見るからに収束が遅いので、次の式を使った。

\frac{\pi}{6} = \sum^{\infty}_{n=0} \frac{(2n)!}{2^{4n+1} (n!)^2 (2n+1)}

高速化を目指すと大変そうなので、安易にRationalに頼って、少数化は、10^n倍するだけ。

def fact(n)
  (1..n).inject(:*) or 1
end

NMAX=130
KETA=77

sum=0
(0..NMAX).each do |n|
  sum += Rational(6*fact(2*n),2**(4*n+1)*fact(n)**2*(2*n+1))
  w = (sum*10**KETA).to_i.to_s
  w[1,0] = "."
  puts w
end