I'm a new learner of Python and currently doing the Python Workbook by Ben Stephenson. I'm stuck with exercise 69 and my pi value is diverging.... can anyone help? Any errors with my code?
I've also attached the exercise question here. Exercise Question
#Exercise 69: Approximate pi
maxrun = 15
denominator1 = 2
denominator2 = 3
denominator3 = 4
fractionpos = (4/(denominator1*denominator2*denominator3))
denominatora = 4
denominatorb = 5
denominatorc = 6
fractionneg = -4/(denominatora*denominatorb*denominatorc)
pi = 3
count = 1
while maxrun != 0:
if count %2 != 0: #odd runs are positive
pi = pi+fractionpos
print('Approximation',count,'pi value is',pi)
count = count+1
denominator1 = denominator1+4
denominator2 = denominator2+4
denominator3 = denominator3+4
maxrun = maxrun-1
elif count %2 ==0: #even runs are negative
pi = pi+fractionneg
print('Approximation',count,'pi value',pi)
count = count+1
denominatora = denominator1+4
denominatorb = denominator2+4
denominatorc = denominator3+4
maxrun = maxrun-1
Each time you update your denominators, you'll need to also update your fraction.
Right now your fractionpos
and fractioneg
are not changing and so each iteration, you are adding the original terms. This is why your pi approximation diverges.
We can ammend this by updating fractionpos
and fractionneg
after updating our denominators.
if count %2 != 0: #odd runs are positive
pi = pi+fractionpos
print('Approximation',count,'pi value is',pi)
count = count+1
denominator1 = denominator1+4
denominator2 = denominator2+4
denominator3 = denominator3+4
fractionpos = (4/(denominator1*denominator2*denominator3))
maxrun = maxrun-1
else: #even runs are negative
pi = pi+fractionneg
print('Approximation',count,'pi value',pi)
count = count+1
denominatora = denominator1+4
denominatorb = denominator2+4
denominatorc = denominator3+4
fractionneg = -4/(denominatora*denominatorb*denominatorc)
maxrun = maxrun-1