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

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-30 01:19:25

问题


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.)


回答1:


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.



来源:https://stackoverflow.com/questions/10367011/why-is-pow-infinity-positive-non-integer-infinity

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!