pow运算符的计算错误

时间:2014-05-20 11:57:20

标签: python

print (-2 ** 2)应该返回什么?根据我的计算,它应该是4,但是解释器会返回-4 这个Python的东西或我的数学是那么可怕吗?

4 个答案:

答案 0 :(得分:23)

根据docs**的优先级高于-,因此您的代码等同于-(2 ** 2)。要获得所需的结果,您可以将-2放入括号中

>>> (-2) ** 2
4

或使用内置pow function

>>> pow(-2, 2)
4

math.pow函数(返回float值)

>>> import math
>>> math.pow(-2, 2)
4.0

答案 1 :(得分:5)

**操作在减号之前完成。为了得到预期的结果,你应该做

print ((-2) ** 2)

From the documentation

  

因此,在功率和一元运算符的未加密集的序列中,运算符从右到左进行求值(这不会限制操作数的求值顺序):-1**2得到-1。< / p>

文档中还提供了完整的detail of operators precedence。您可以看到最后一行是(expr),它强制在使用之前评估expr,因此(-2) ** 2 = 4的结果

答案 2 :(得分:1)

你也可以使用数学库...

math.pow(-2,2) --> 4
-math.pow(2,2) --> -4
math.pow(4,0.5) --> 2

答案 3 :(得分:-1)

Python有一个问题,并没有将-2视为数字。这似乎是设计的,因为它在文档中提到。

-2被解释为 - (2){一元减去正数2}

这通常不会产生问题但是在-a ** 2中**具有更高的优先级 - 因此 - 被解释为一元操作而不是数字-2 ** 2的一部分评估为-2而不是2.

相关问题