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

Why is the value of 1**Inf equal to 1, not NaN?

为什么是1**Inf == 1

我认为应该是 NaN,就像 Inf-InfInf/Inf

python 中如何对浮点数求幂? exp(y*log(x)) 会得到正确的结果:/

技术上 1^inf 被定义为 limit(1^x, x->inf)。 1^x = 1 对于任何 x >1,所以它应该是 limit(1,x->inf) = 1,而不是 NaN

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

但是,Python 在这种情况下并没有完全遵循数学。 The document of math.pow 说:

math.pow(x, y)

Return x raised to the power y. Exceptional cases follow Annex ‘F’ of the C99 standard as far as possible. In particular, pow(1.0, x) and pow(x, 0.0) always return 1.0, even when x is a zero or a NaN.

浮点运算不是实数运算。实际分析得出的 "correct" 概念不一定适用于浮点数。

然而,在这种情况下,问题在于 pow 从根本上代表了两个相似但不同的功能:

  • 用整数次幂求幂,自然是函数RxZ --> R(或RxN --> R)。
  • pow(x,y) = exp(y * log(x))给出的二元复函数限制在实线

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

有时将这两个功能分开,使边缘情况更合理;完成后,第一个函数称为 pown,第二个函数称为 powr;正如您所注意到的,pow 是这两个函数的合并,并且对来自 pown.

的这些值使用边缘情况