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