Bizarre arithmetic results

Peter Otten __peter__ at web.de
Thu Feb 11 07:25:47 EST 2010


Terrence Cole wrote:

> Can someone explain to me what python is doing here?
> 
> Python 3.1.1 (r311:74480, Feb  3 2010, 13:36:47)
> [GCC 4.3.4] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>>>> -0.1 ** 0.1
> -0.7943282347242815
>>>> a = -0.1; b = 0.1
>>>> a ** b
> (0.7554510437117542+0.2454609236416552j)
>>>> -abs(a ** b)
> -0.7943282347242815
> 
> Why does the literal version return the signed magnitude and the
> variable version return a complex?

Operator precedence.

>>> -0.1**0.1
-0.7943282347242815
>>> (-0.1)**0.1
(0.7554510437117542+0.2454609236416552j)

Quoting http://docs.python.org/3.1/reference/expressions.html:

"""
The power operator binds more tightly than unary operators on its left; it 
binds less tightly than unary operators on its right.
"""

Peter



More information about the Python-list mailing list