为什么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
一个正的非整数。