为什么pow(-infinity,正非整数)+无限?

时间:2012-04-28 19:51:57

标签: c math floating-point standards ieee-754

C99附件F(IEEE浮点支持)说:

  

pow(−∞, y)为y>返回+∞; 0而不是奇数。

但是,比方说,( - ∞) 0.5 实际上有虚数值±∞i,而不是+∞。 C99自己的sqrt(−∞)返回NaN并按预期生成域错误。为什么pow需要返回+∞?

(大多数其他语言直接使用C库,或者像本例中的Python一样,通过标准复制它所需的行为,因此在实践中这不仅仅影响C99。)

1 个答案:

答案 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正非整数。