为什么1 ** Inf的值等于1,而不是NaN?

时间:2015-06-12 09:07:07

标签: python math floating-point nan exponentiation

为什么1**Inf == 1

我认为它应该是NaN,就像Inf-InfInf/Inf一样。

如何在python中的浮点数上实现取幂? exp(y*log(x))会得到正确的结果:/

3 个答案:

答案 0 :(得分:3)

你是对的,数学上the value of 1 is indeterminate

然而,在这种情况下,Python并不完全遵循数学。 The document of math.pow说:

'.sr-only'
     

math.pow(x, y) 提升为权力x。特殊情况尽可能遵循C99标准的附录'F'。 特别是,ypow(1.0, x)始终返回pow(x, 0.0),即使1.0为零或NaN。

答案 1 :(得分:2)

浮点运算不是实数运算。通过实际分析得出的“正确”概念不一定适用于浮点数。

然而,在这种情况下,麻烦只是#define EMPTY int main() { return 0 |EMPTY| 0; } 从根本上代表了两个相似但不同的功能:

  • 具有整数幂的指数,其自然是函数 R x Z - > R (或 R x N - > R )。
  • pow给出的双变量复函数仅限于实线。

这些函数与正常值一致,但它们的边缘情况在零,无穷大和沿负实轴(传统上是第二个函数的分支切割)不同。

有时将这两个函数分开以使边缘情况更合理;完成后,第一个函数称为pow(x,y) = exp(y * log(x)),第二个函数称为pown;正如您所注意到的powr是两个函数的混合,并使用来自pow的这些值的边缘情况。

答案 2 :(得分:1)

技术上,1 ^ inf被定义为极限(1 ^ x,x-> inf)。对于任何x> 1,1 ^ x = 1,因此它应该是限制(1,x-> inf)= 1,而不是NaN