[Tutor] getting error while solving a series that estimates the value of pi

surya k suryak at live.com
Mon Jul 18 19:12:38 CEST 2011


Let me write the code again..
Thanks for your help.

On Mon, Jul 18, 2011 at 10:38 PM, James Reynolds <eire1130 at gmail.com> wrote:

>
>
> On Mon, Jul 18, 2011 at 12:10 PM, surya k <suryak at live.com> wrote:
>
>> Hi,
>>
>> The problem is to estimate the value of pi using the following series.
>>  *1 / pi  = (( 2 * sqrt(2) )/ 9801 )  * SIGMA of k[ (4k)! (1103 +
>> 26390*k) / (k!^ 4 ) * 396^(4k)  ]*
>> *where k is [0, infinity)*
>> * Problem is located at : ThinkPython Book, www.thinkpython.org
>>    *Pg 89, Exercise 7.5, Think Python Book. *
>> *
>> *
>> the series should be considered till the last term of the sigma must be <
>> 1e-15
>> I have written the below code :
>>
>> *# program estimates the value of pi*
>> *# Ramanujan's series... *
>> *import math*
>> *
>> *
>> *def fact(n) : # def of factorial function.*
>> *    if n > 0 :    *
>> *       return n * fact(n-1)*
>> *    if n == 0 :*
>> *       return 1*
>> *
>> *
>> *k = 0*
>> *tot = 0*
>> *temp1 = 0*
>> *while k >= 0 and temp1 == 0 :*
>> *
>> *
>> *      a = ( 2 * math.sqrt(2) ) / 9801 # first term before sigma *
>> *      nu = fact (4*k) * (1103 + (26390*k) )  # numerator of series*
>> *      de = pow( fact(k), 4 ) * pow ( 396, 4*k )  # denominator of series
>> *
>> *      *
>> *      if de / nu > 1e-15 : *
>> *            temp = nu / de*
>> *            tot = tot + temp*
>> *            temp1 = 0 *
>> *            k = k + 1 *
>> *      elif de / nu  == 1e-15 :*
>> *             series = a * tot  *
>> *             k = k + 1*
>> *             temp1 = 0*
>> *      elif de / nu < 1e-15 :*
>> *             print series*
>> *             temp1 = 1*
>>
>>
>> I am getting the following error : which is completely surprising!
>>
>> *Traceback (most recent call last):*
>> *  File "pi.py", line 30, in <module>*
>> *    print series*
>> *NameError: name 'series' is not defined*
>>
>> *
>> *
>> Thus I have removed name 'series' and replaced with  *a*tot, *
>> now I am getting this error
>>
>> *Traceback (most recent call last):*
>> *  File "pi.py", line 30, in <module>*
>> *    print 1 / (a * tot)*
>> *ZeroDivisionError: float divisio*n
>>
>>
>>
>> Thus I changed the first highlighted lines to
>>
>>  *nu = float (fact (4*k) * (1103 + (26390*k) ) )*
>> *      de = float (pow( fact(k), 4 ) * pow ( 396, 4*k )) *
>>
>>
>> now I am getting
>>
>> * Traceback (most recent call last):*
>> *  File "pi.py", line 18, in <module>*
>> *    de = float (pow( fact(k), 4 ) * pow ( 396, 4*k ) )*
>> *OverflowError: long int too large to convert to float*
>>
>> *help me out of this problem, how could I fix this*
>>
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/mailman/listinfo/tutor
>>
>>
>
>
> I am getting the following error : which is completely surprising!
>
>
> You only define "series" when nu/de == XXX. Just don't print series outside
> of where it is defined, or print it outside of the while loop if you can be
> assured it is defined when the while loop ends.
>
> Even so, you would still end up with the overflow error, because you have
> de / nu and I'm assuming you want nu / de. As an aside, you might want to
> consider creating a variable above all the if statements called nude = nu /
> de and replace all of the nu / de 's to nude. This way you only divide once
> and not (potentially) three times per loop.
>
>
>
>
>
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20110718/3dda771e/attachment-0001.html>


More information about the Tutor mailing list