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

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

对于y> 0而言, pow(−∞, y)返回+∞而不是奇数。

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

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

对于奇数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一个正的非整数。