OverflowError: (34, 'Result too large')

user3033766 picture user3033766 · Nov 25, 2013 · Viewed 67.7k times · Source

I'am getting an overflow error(OverflowError: (34, 'Result too large')
I want to calculate pi to 100 decimals here's my code:

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())

Answer

Peter DeGlopper picture Peter DeGlopper · Nov 25, 2013

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))...)