Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is pow(-infinity, positive non-integer) +infinity?

C99 annex F (IEEE floating point support) says this:

pow(−∞, y) returns +∞ for y > 0 and not an odd integer.

But, say, (−∞)0.5 actually has the imaginary values ±∞i, not +∞. C99’s own sqrt(−∞) returns a NaN and generates a domain error as expected. Why then is pow required to return +∞?

(Most other languages use the C library directly or, like Python in this case, copy the behaviour required of it by standards, so in practice this affects more than just C99.)

like image 892
Chortos-2 Avatar asked Apr 28 '12 19:04

Chortos-2


1 Answers

For odd integer y, it makes sense to define

pow(±0, y) = ±0

After all, raising to an odd power always preserves the sign. If we can preserve the sign of zero, we might as well do it. For positive non-integer y, we should define

pow(±0, y) = +0.

The sign is undefined. But we don't set this to NaN for -0 for the same reason we don't set sqrt(-0) equal to NaN: it just wouldn't make sense. (FWIW, this is also how it is defined in section 9.2.1 of the IEEE-754-2008 standard.)

Since 1/±0 = ±∞, and mathematically

pow(x,y) = 1/pow(1/x,y)

then setting x=±∞ in the above, leads to:

pow(±∞,y) = 1/pow(±0,y) = 1/+0 = +∞

for y a positive non-integer.

like image 190
Jeffrey Sax Avatar answered Oct 14 '22 11:10

Jeffrey Sax