```
# a generator to approximate pi to n decimals
# tested with Python 2.5.4 and Python 3.1.1 by vegaseat
def pi_generate():
"""
generator to approximate pi
returns a single digit of pi each time iterated
"""
q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
while True:
if 4 * q + r - t < m * t:
yield m
q, r, t, k, m, x = \
(10*q, 10*(r-m*t), t, k, (10*(3*q+r))//t - 10*m, x)
else:
q, r, t, k, m, x = \
(q*k, (2*q+r)*x, t*x, k+1, (q*(7*k+2)+r*x)//(t*x), x+2)
# number of decimal digits desired
# used 56 here to make it display well, n can be much higher
n = 56
pi_str = ""
for ix, v in enumerate(pi_generate()):
#print(v) # test
if ix > n:
break
pi_str += str(v)
# use string slicing to insert the missing period at index 1
pi_str = pi_str[0] + '.' + pi_str[1:]
print( "pi approx. to %d decimals (below it is published pi):" % n )
print( pi_str )
# published pi value
pi_pub = "3.14159265358979323846264338327950288419716939937510582097"
print( pi_pub )
"""my result -->
pi approx. to 56 decimals (below it is published pi):
3.14159265358979323846264338327950288419716939937510582097
3.14159265358979323846264338327950288419716939937510582097
"""
```

1

Contributor0

Replies3

Views**Are you able to help answer this sponsored question?**

Questions asked by members who have earned a lot of community kudos are featured in order to give back and encourage quality replies.

Recommended Articles