[Edu-sig] time passing: ramanujan and pi
kirby urner
kirby.urner at gmail.com
Thu Dec 3 20:23:34 EST 2015
Looking back:
https://mail.python.org/pipermail/edu-sig/2006-September/006963.html
shows me still importing __division__ and relying on some factorial off
state.
Tonight, preparing for class, I'm able to rely on math.factorial, introduce
other improvements.
# -*- coding: utf-8 -*-
"""
Created on Thu Dec 3 16:40:46 2015
See: https://crypto.stanford.edu/pbc/notes/pi/ramanujan.html
@author: kurner
LAB:
Write a unittest to confirm convergence to:
'3.141592653589793238462643383279502884197169
39937510582097494459230781640628620899862803
48253421170'
after n steps (this is the answer key version)
"""
import unittest
from decimal import *
from math import factorial as fact
def pieinsky():
c1 = Decimal(4)
c2 = Decimal(1103)
c3 = Decimal(26390)
c4 = Decimal(396)
c5 = Decimal(9801)
# code formatted for readability (make it be one line)
root8 = Decimal('2.82842712474619009760337744841939615'
'7139343750753896146353359475981464956'
'9242140777007750686552831454700276')
i = Decimal(0)
thesum = Decimal(0)
while True:
term = (fact(c1*i)*(c2 + c3*i))/(pow(fact(i),4)*pow(c4,4*i))
thesum = thesum + term
yield 1/((root8/c5)*thesum)
i += 1
class TestPi(unittest.TestCase):
def test_outcome(self):
expected = ('3.141592653589793238462643383'
'2795028841971693993751058209749445923078'
'164062862089986280348253421170')
with localcontext() as c:
c.prec = 100
the_gen = pieinsky()
for _ in range(20):
next(the_gen)
self.assertEqual(str(next(the_gen))[:len(expected)], expected)
if __name__ == "__main__":
unittest.main()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/edu-sig/attachments/20151203/c7b3a89e/attachment.html>
More information about the Edu-sig
mailing list