【问题标题】:Why is the value of 1**Inf equal to 1, not NaN?为什么 1**Inf 的值等于 1,而不是 NaN?
【发布时间】:2015-08-28 05:47:33
【问题描述】:

为什么是1**Inf == 1

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

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

【问题讨论】:

    标签: python math floating-point nan exponentiation


    【解决方案1】:

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

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

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

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

    这两个函数有时会被分开以使边缘情况更合理;完成后,第一个函数称为pown,第二个函数称为powr;正如您所注意到的,pow 是这两个函数的合并,并对来自pown 的这些值使用边缘情况。

    【讨论】:

      【解决方案2】:

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

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

      math.pow(x, y)
      

      返回x 的幂y。例外情况尽可能遵循 C99 标准的附件‘F’。 特别是,pow(1.0, x)pow(x, 0.0) 始终返回 1.0,即使 x 是零或 NaN。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • eeee wut?不,它不是 O_o。 1^Inf 是不确定的,无论如何都没有定义。
        • 看看我上面写的。 x^y 相当于 exp(y*log(x)) (我的意思是数学上)并且返回 NaN
        猜你喜欢
        • 2013-08-17
        • 1970-01-01
        • 1970-01-01
        • 2014-07-04
        • 2018-09-08
        • 2015-04-08
        • 2021-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多