关于零指数方程符号的麻烦

时间:2014-12-03 20:49:48

标签: python python-2.7 math negative-number exponentiation

Python似乎无法将数字的正确值返回到零的幂。 当我给它一个字面方程时,它可以正常工作,但它总是返回正数1,对于比原始数字更复杂的零点数。
以下是一些测试:

>>> -40 ** 0  # this is the correct result
-1
>>> (0 - 40) ** 0  # you'd expect this to give the same thing, but...
1
>>> a = -40  # let's try something else...
>>> a ** 0
1
>>> int(-40) ** 0  # this oughtn't to change anything, yet...
1
>>> -66.6 ** 0  # raw floats are fine.
-1.0
>>> (0 - 66.6) ** 0.0  # ...until you try and do something with them.
1.0

更新:pow()也给出了这个结果,所以第一个结果可能是例外......

>>> pow(-60, 0)
1

签名整数会有问题吗?我需要这个用于值为1,-1或0的三重开关,具体取决于输入是正值还是负值,或者为零。我可以通过以下方式完成同样的事情:

if   val > 0: switch = 1
elif val < 0: switch = -1
else:         switch = 0

...然后使用变量开关作为我的目的 但这不能回答我关于Python如何处理零功率的问题 (我也会接受-40 ** 0偶然返回-1 (现象),但我怀疑是这种情况......)

3 个答案:

答案 0 :(得分:5)

Python是正确的并且正在做你期望它做的事情。这是一个操作顺序问题。第零次幂的任何数字(负数或正数)等于1.但请记住,乘法在按运算顺序减去之前。所以更详细地说,python看到的是: 第一种情况:

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

第二案:

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

在第五种情况下,它与括号

有关
int(-40) ** 0 = (-40) ** 0 = 1

答案 1 :(得分:1)

刚刚解决了这个问题,我没有得到语法。

但我不认为(-40)^ 0 = -40 ^ 0。

在左侧,指数是最后一个操作。这就是左侧应该等于1的原因。 在右侧,减号是最后一个操作。这就是为什么结果应该是-1。

答案 2 :(得分:1)

这里没有任何问题。 power 0的每个号码都是1

-.+,...这样的python标志中,权力优先级较低(**)所以当你将0 - 40置于括号内时,你(-1)**0就是1但是当你-1**0 1**0时,-然后>>> (0-4)**0 == (-1)**0 == 1 >>> -1**0 == -(1**0) == -1

{{1}}