[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