3-arg float pow()

Tim Peters tim at zope.com
Tue Sep 4 20:50:02 CEST 2001

[Marcin 'Qrczak']
> I would expect pow to use multiplication when the exponent is an
> integer (with a signle division if it's negative),

As I said, that's less accurate than a decent libm pow() when floats are
involved, so is a bad idea in that case.

> and the libm pow or equivalently exp(b*ln(a)) if the exponent is a float.

Sorry, but a libm that implemented pow(x, y) literally as exp(b*ln(a))
couldn't be given away (it's numerically atrocious for large |ln(a)| and/or
large |b| -- decent fp math libraries are much harder to write than I expect
you're aware of).

> So (-3)**2 would be defined, but (-3)**2.0 would be not.

Current CVS Python handles both fine, and even a raw libm pow() should have
no problems with pow(-3, 2.0).

> And 3**(-2) should return a rational.

If we had rationals, sure.  In the meantime 0.1111111111111111 is better
than 0.

More information about the Python-list mailing list