在Python中将数字提升到零的幂时的奇怪行为

时间:2014-09-02 12:49:16

标签: python math

我正在使用Python 2.7.5。当将int提升到零的幂时,您可能会看到-1或1,具体取决于分子是正还是负。

直接键入python解释器会产生以下结果:

>>> -2418**0
-1

这是正确的答案。但是当我把它输入同一个解释器时:

>>> result = -2481
>>> result**0
1

答案是1而不是-1。使用complex内置as suggested here对结果没有影响。

为什么会这样?

3 个答案:

答案 0 :(得分:7)

为什么你会期望它是-1? 1是(根据我所教导的定义)正确答案。

由于运算符优先级,第一个给出了错误的答案。

(-1)**0 = 1

-1**0 = -(1**0) = -(1) = -1

请参阅维基百科,了解0指数的定义:http://en.wikipedia.org/wiki/Exponentiation#Zero_exponent

答案 1 :(得分:2)

-2418**0被解释(数学上)为-1 * (2418**0),因此答案为-1 * 1 = -1。指数在乘法之前发生。

在第二个示例中,您将变量result绑定到-1。下一行采用变量result并将其提升为0的幂,因此您得到1。换句话说,你正在做(-1)**0

{p> n**0对于任何实数1都是n ...除了0:技术上0**0未定义,但Python仍将返回{{1} }}

答案 2 :(得分:0)

你的数学错了。 (-2481)**0应为1。

根据维基百科,Any nonzero number raised by the exponent 0 is 1