为什么 1**Inf 的值等于 1,而不是 NaN?
Why is the value of 1**Inf equal to 1, not NaN?
为什么是1**Inf == 1
?
我认为应该是 NaN
,就像 Inf-Inf
或 Inf/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
.
的这些值使用边缘情况
为什么是1**Inf == 1
?
我认为应该是 NaN
,就像 Inf-Inf
或 Inf/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 powery
. Exceptional cases follow Annex ‘F’ of the C99 standard as far as possible. In particular,pow(1.0, x)
andpow(x, 0.0)
always return1.0
, even whenx
is a zero or a NaN.
浮点运算不是实数运算。实际分析得出的 "correct" 概念不一定适用于浮点数。
然而,在这种情况下,问题在于 pow
从根本上代表了两个相似但不同的功能:
- 用整数次幂求幂,自然是函数RxZ --> R(或RxN --> R)。
pow(x,y) = exp(y * log(x))
给出的二元复函数限制在实线
这些函数在正常值上一致,但在零、无穷大和沿负实轴(传统上是第二个函数的分支切割)的边缘情况下不同。
有时将这两个功能分开,使边缘情况更合理;完成后,第一个函数称为 pown
,第二个函数称为 powr
;正如您所注意到的,pow
是这两个函数的合并,并且对来自 pown
.