C99附件F(IEEE浮点支持)说:
pow(−∞, y)
为y>返回+∞; 0而不是奇数。
但是,比方说,( - ∞) 0.5 实际上有虚数值±∞i,而不是+∞。 C99自己的sqrt(−∞)
返回NaN并按预期生成域错误。为什么pow
需要返回+∞?
(大多数其他语言直接使用C库,或者像本例中的Python一样,通过标准复制它所需的行为,因此在实践中这不仅仅影响C99。)
答案 0 :(得分:16)
对于奇数整数y
,定义
pow(±0, y) = ±0
毕竟,提高到奇怪的力量总是保留标志。如果我们能够保持零的符号,我们也可以这样做。对于正非 - 整数y
,我们应该定义
pow(±0, y) = +0.
标志未定义。但我们并未将NaN
设置为-0
,原因与我们未将sqrt(-0)
设置为NaN
的原因相同:它只是没有意义。 (FWIW,这也是IEEE-754-2008标准第9.2.1节中的定义。)
由于1 /±0 =±∞,因此在数学上
pow(x,y) = 1/pow(1/x,y)
然后在上面设置x=±∞
,导致:
pow(±∞,y) = 1/pow(±0,y) = 1/+0 = +∞
表示y
正非整数。