(-1)**1000

Ned Batchelder ned at nedbatchelder.com
Wed Oct 22 17:01:28 CEST 2014


On 10/22/14 5:27 AM, ast wrote:
>
> "Chris Angelico" <rosuav at gmail.com> a écrit dans le message de
> news:mailman.15058.1413968065.18130.python-list at python.org...
>> On Wed, Oct 22, 2014 at 7:27 PM, ast <nomail at invalid.com> wrote:
>>> If i am writing (-1)**1000 on a python program, will the
>>> interpreter do (-1)*(-1)*...*(-1) or something clever ?
>>>
>>> In fact i have (-1)**N with N an integer potentially big.
>>
>> Exponentiation is far more efficient than the naive implementation of
>> iterated multiplication.
>
> In the very particular case of (-1)**N,  I belive that Python check
> the odd or even parity of N and provides the result accordingly.
>
> I tried:
>>>> (-1)**1000000000000000000000000000000000
> 1
>>>> (-1)**1000000000000000000000000000000001
> -1
>
> and it is instantaneous
>
>

Keep in mind that actually calculating the exponentiation wouldn't do 
1000000000000000000000000000000000 multiplications anyway: the clever 
way to do integer powers is by squaring based on the binary 
representation of the exponent.  It's explained here: 
http://stackoverflow.com/a/101613/14343

So even if Python is actually calculating the value, it's only doing 75 
multiplications or so.

-- 
Ned Batchelder, http://nedbatchelder.com




More information about the Python-list mailing list