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

Cho*_*s-2 14 c math floating-point standards ieee-754

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

pow(??, y) y> 0时返回+∞而不是奇数.

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

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

Jef*_*Sax 16

对于奇数y,定义是有意义的

pow(±0, y) = ±0
Run Code Online (Sandbox Code Playgroud)

毕竟,提高到奇怪的力量总是保留标志.如果我们能够保持零的符号,我们也可以这样做.对于积极的整数y,我们应该定义

pow(±0, y) = +0.
Run Code Online (Sandbox Code Playgroud)

标志未定义.但我们不这样设定NaN-0出于同样的原因,我们没有设置sqrt(-0)等于NaN:它只是就没有意义.(FWIW,这也是IEEE-754-2008标准第9.2.1节中定义的方式.)

由于1 /±0 =±∞,并且在数学上

pow(x,y) = 1/pow(1/x,y)
Run Code Online (Sandbox Code Playgroud)

然后x=±?在上面设置,导致:

pow(±?,y) = 1/pow(±0,y) = 1/+0 = +?
Run Code Online (Sandbox Code Playgroud)

对于y正非整数.

  • 这将问题转移到"为什么有-0?" 好吧,一个原因是`-0`表示来自下方的下溢.另一个是复杂平面中的分支切割,因为它们是传统定义的,只需按"-0"工作即可. (2认同)