ikautak.log

C/C++, Python, CUDA, Android, Linux kernel, Network, etc.

pythonのジェネレータで円周率

Pythonのジェネレータの勉強で、円周率を求めるようなジェネレータを作ってみた。
(アルゴリズムはwikipediaに載っていたウォリスの式)

#!/usr/bin/env python

def pi():
  numerator = 2.0
  denominator = 1.0
  while True:
    yield numerator/denominator
    if numerator < denominator:
      numerator += 2
    else:
      denominator += 2

p = pi()

res = 1.0
for i in range(10000000):
  res *= next(p)

print res * 2
$ time ./pi.py 
3.14159249651
real    0m8.430s
user    0m8.253s
sys    0m0.160s

速度も精度もひどい^^