Search code examples
pythonpython-3.xpi

Pi using Python


I am a beginner in Python. I try to evaluate pi in Python Language. I use here the Archimedes method.

My code is:

import math
from decimal import *
getcontext().prec = 50

pi = 0
PolySides = 6
SideLen = 1
Perim = 6
Dia = 2

while PolySides < 10000000000:
    SideLen2 = Decimal(SideLen) / Decimal(2)
    radius_a = Decimal(math.sqrt(1 - SideLen2**2))
    radius_b = Decimal(1) - Decimal(radius_a)
    SideLenNew = Decimal(math.sqrt(SideLen2**2 + radius_b**2))
    PolyCircum = Decimal(PolySides * SideLen)
    pi = PolyCircum / Dia
    print('Polygon Sides:', PolySides, 'Pi = ', pi)
    SideLen = SideLenNew
    PolySides = 2 * PolySides

But for some reason this code prints pi upto 14 decimal places. I cannot understand where I'm losing precision. Thank you.


Solution

  • You must use the .sqrt() method of your decimals:

    from decimal import *
    getcontext().prec = 50
    
    pi = 0
    PolySides = 6
    SideLen = 1
    Perim = 6
    Dia = 2
    
    while PolySides < 1000000000000:
        SideLen2 = Decimal(SideLen) / Decimal(2)
        radius_a = (1 - SideLen2**2).sqrt()
        radius_b = Decimal(1) - Decimal(radius_a)
        SideLenNew = (SideLen2**2 + radius_b**2).sqrt()
        PolyCircum = Decimal(PolySides * SideLen)
        pi = PolyCircum / Dia
        print('Polygon Sides:', PolySides, 'Pi = ', pi)
        SideLen = SideLenNew
        PolySides = 2 * PolySides
    

    Output:

    Polygon Sides: 824633720832 Pi =  3.1415926535897932384626357839340399511415560167917
    

    has 22 exact decimals.