Rubyでn桁の円周率を求める

検証用に使っていた物です。

len = ARGV[0].to_i
B = 10 ** len
B2 = B << 1
pi = (len * 8 + 1).step(3, -2).inject(B) {|a, i| (i >> 1) * (a + B2) / i} - B
puts "3.#{pi}"
# time ruby pi.rb 100
3.141592653589793238462643383279502884197169399375105820974944592307816406286208
9986280348253421170679

real    0m0.045s
user    0m0.027s
sys     0m0.007s

10万桁位なら2分前後で行けるはずです。
※ウチのPCはショボイのでもっと早いかも