I tried to use this code to calculate pi to many decimal places:
def pi():
pi = 0
for k in range(350):
pi += (4./(8.*k+1.) - 2./(8.*k+4.) - 1./(8.*k+5.) - 1./(8.*k+6.)) / 16.**k
return pi
print(pi())
Why do I get an error that says OverflowError: (34, 'Result too large')
?
Python floats are neither arbitary precision nor of unlimited size. When k = 349, 16.**k
is much too large - that's almost 2^1400. Fortunately, the decimal
library allows arbitrary precision and can handle the size:
import decimal
decimal.getcontext().prec = 100
def pi():
pi = decimal.Decimal(0)
for k in range(350):
pi += (decimal.Decimal(4)/(decimal.Decimal(8)*decimal.Decimal(k+1))...)