Overflow error

Jane Austine janeaustine50 at hotmail.com
Sat Jul 31 17:10:36 CEST 2004


danb_83 at yahoo.com (Dan Bishop) wrote in message news:<ad052e5c.0407282337.4cefac1e at posting.google.com>...
> Michael Hudson <mwh at python.net> wrote in message news:<m3k6wpk2i9.fsf at pc150.maths.bris.ac.uk>...
> > janeaustine50 at hotmail.com (Jane Austine) writes:
> > 
> > > >>> from math import e
> > > >>> e**709
>  8.218407461554662e+307
> > > >>> e**710
> > > 
> > > Traceback (most recent call last):
> > >   File "<pyshell#15>", line 1, in -toplevel-
> > >     e**710
> > > OverflowError: (34, 'Result too large')
> > > 
> > > What should I do to calculate e**710?
> > 
> > Well, it's too big for your platform's C double, so you need a
> > different representation.  I don't know if there are big float
> > packages out there that handle such things (likely, though) or if
> > there are Python interfaces to the same (less likely).
> 
> You can also do it with rationals:
> 
> >>> def unboundedRange(start=0):
> ...    n = start
> ...    while True:
> ...       yield n
> ...       n += 1
> ...
> >>> def exp(x, tolerance=rational(1, 10**8)):
> ...     total = term = 1
> ...     for n in unboundedRange(1):
> ...        term *= rational(x, n)
> ...        total += term
> ...        if abs(term) < tolerance:
> ...            break
> ...     return total
> ...
> >>> float(exp(1))
>  2.7182818282861687
> >>> long(exp(710))
> 223399476616171103125364445811681000656812286337946419939922579763369439173505508238045208936075928608008858947959672204126540307964255760331629484074081710600724815623037686564199430826371986947985157927836355814874856465984698389900107606439843841800268119591413945009951691796042715693932113514608158683164L
> 
> However, I don't recommend this, because it's *very* slow.

Interesting. Where do I get the "rational" module?



More information about the Python-list mailing list