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
正非整数.