为啥 1**Inf 的值等于 1,而不是 NaN?
Posted
技术标签:
【中文标题】为啥 1**Inf 的值等于 1,而不是 NaN?【英文标题】: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-Inf
或Inf/Inf
。
如何在 python 中的浮点数上实现求幂?
exp(y*log(x))
会得到正确的结果:/
【问题讨论】:
【参考方案1】:浮点运算不是实数运算。实际分析得出的“正确”概念不一定适用于浮点数。
然而,在这种情况下,问题在于pow
从根本上代表了两个相似但不同的功能:
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以上是关于为啥 1**Inf 的值等于 1,而不是 NaN?的主要内容,如果未能解决你的问题,请参考以下文章
matlab怎么计算出来的数很多都是NaN的值呢?怎么回事啊