Why does 1**2**3**4**5 raise a MemoryError?

Dave Angel davea at davea.name
Sun Mar 31 09:34:31 CEST 2013


On 03/31/2013 02:56 AM, morphex wrote:
> Hi.
>
> I was just doodling around with the python interpreter today, and here is the dump from the terminal:
>
> morphex at laptop:~$ python
> Python 2.7.3 (default, Sep 26 2012, 21:53:58)
> [GCC 4.7.2] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>>>> 1**2
> 1
>>>> 1**2**3
> 1
>>>> 1**2**3**4
> 1L
>>>> 1**2**3**4**5
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> MemoryError
>>>>
>
> Does anyone know why this raises a MemoryError?  Doesn't make sense to me.
>
>

Perhaps you didn't realize that the expression will be done from right 
to left.  So first it calculates 4**5 which is 1024

Then it calculates 3**1024, which has 488 digits.  then it calculates 2 
to that power, which is a number large enough to boggle the mind.  That 
number's storage needs makes a few gigabytes seem like a molecule in the 
ocean.

Anyway, it never gets around to doing the 1**  part.

On the other hand, perhaps you wanted to do a different calculation:

 >>> ((((1**2)**3)**4)**5)
1






-- 
DaveA



More information about the Python-list mailing list