[Python-Dev] return type of __complex__

Antoine Pitrou solipsis at pitrou.net
Sun Oct 21 12:11:01 CEST 2012


On Sun, 21 Oct 2012 13:38:48 +1100
Chris Angelico <rosuav at gmail.com> wrote:
> On Sun, Oct 21, 2012 at 12:53 PM, Steven D'Aprano <steve at pearwood.info> wrote:
> > Python 2.x legitimately distinguished between floats and complex, e.g.:
> >
> > py> (-100.0)**0.5
> >
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in <module>
> > ValueError: negative number cannot be raised to a fractional power
> >
> > If you wanted a complex result, you can explicitly ask for one:
> >
> > py> (-100.0+0j)**0.5
> > (6.123031769111886e-16+10j)
> >
> >
> > I see that behaviour is changed in Python 3.
> 
> Python 2 (future directives aside) also required you to explicitly ask
> for floating point. That was also changed in Python 3. That doesn't
> mean that this is necessarily the right thing to do, but it does have
> precedent. The square root of a negative number is by nature a complex
> number.

In the set of complex numbers, it is. But in the set of float numbers,
a negative number has no square root. I think Steven may be worried
about the impact on people who don't know about complex numbers, which
is a reasonable concern.

I'm also not sure why we have several variants of the power operator:
**, built-in pow(), math.pow().

Regards

Antoine.




More information about the Python-Dev mailing list