为什么在 Python中0 ** 0
等于?1
它不应该像这样抛出异常0 / 0
吗?
3 回答
维基百科对历史的有趣报道以及对价值的不同观点0 ** 0
:
这场辩论至少从 19 世纪初就开始了。当时,大多数数学家都同意
0 ** 0 = 1
,直到 1821 年柯西将0 ** 0
表达式与0⁄0
未定义形式的表格一起列出。在 1830 年代,Libri 发表了一个无法令人信服的论点0 ** 0 = 1
,而莫比乌斯站在他一边……
应用于计算机时,IEEE 754推荐了几种计算功率的函数。它将pow(0, 0)
and定义pown(0, 0)
为返回1
和powr(0, 0)
返回NaN
。
大多数编程语言都遵循0 ** 0 == 1
. 对于整数和浮点参数,Python 也不例外。
考虑x^x
:
使用限制我们可以很容易地得到我们的解决方案并重新排列x^x
我们得到:
x^x= exp(log(x^x))
现在,我们有:
lim x->0 exp(log(x^x))= exp(lim x->0 xlog(x)) = exp(lim x->0 log(x)/(x^-1))
应用L'Hôpital
规则,我们得到:
exp(lim x^-1/(-x^-2)) = exp(lim x->0 -x) = exp(0) = 1=x^x
但根据 Wolfram Alpha0**0
的说法是不确定的,他们得到了以下解释:
0^0 本身是未定义的。由于 a^0 始终为 1,因此 0^0 应等于 1,但 0^a 始终为 0(对于 a>0),因此 0^ 0 应该等于 0。可以说 0^0=1 是一个自然定义,因为 lim_(n->0)n^n=lim_(n->0^+)n^n=lim_(n->0 ^-)n^n=1。但是,对于 n 的一般复数值,该限制不存在。因此,0^0 的定义选择通常被定义为不确定的。”
2^2 = (1+1)*(1+1) = 4(两个对象出现两次)
2^1 = (1+1)*1 = 2(一次出现两个对象)
2^0 = (1+1)*0 = 0(没有出现两个对象)
1^2 = 1 *(1+1) = 2(一个对象出现两次)
1^1 = 1 *1 = 1(一个对象出现一次)
1^0 = 1 *0 = 0(一个对象没有出现)
0^2 = 0 *(1+1) = 0(零对象出现两次)
0^1 = 0 *1 = 0(零个对象出现一次)
0^0 = 0 *0 = 0(零个对象未出现)
因此,你不能从无到有!