【发布时间】:2015-08-28 05:47:33
【问题描述】:
为什么是1**Inf == 1?
我认为应该是NaN,就像Inf-Inf 或Inf/Inf。
如何在 python 中的浮点数上实现求幂?
exp(y*log(x)) 会得到正确的结果:/
【问题讨论】:
标签: python math floating-point nan exponentiation
为什么是1**Inf == 1?
我认为应该是NaN,就像Inf-Inf 或Inf/Inf。
如何在 python 中的浮点数上实现求幂?
exp(y*log(x)) 会得到正确的结果:/
【问题讨论】:
标签: python math floating-point nan exponentiation
浮点运算不是实数运算。实际分析得出的“正确”概念不一定适用于浮点数。
然而,在这种情况下,问题在于pow 从根本上代表了两个相似但不同的功能:
pow(x,y) = exp(y * log(x)) 给出的二元复函数限于实线。这些函数在正常值上是一致的,但在零、无穷大和沿负实轴(传统上是第二个函数的分支切割)的边缘情况不同。
这两个函数有时会被分开以使边缘情况更合理;完成后,第一个函数称为pown,第二个函数称为powr;正如您所注意到的,pow 是这两个函数的合并,并对来自pown 的这些值使用边缘情况。
【讨论】:
从数学上讲,你是对的,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。
【讨论】:
技术上 1^inf 定义为 limit(1^x, x->inf)。 1^x = 1 对于任何 x >1,所以它应该是 limit(1,x->inf) = 1,而不是 NaN
【讨论】:
x^y 相当于 exp(y*log(x)) (我的意思是数学上)并且返回 NaN