Python pow **结果

Python pow ** results

本问题已经有最佳答案,请猛点这里访问。

为什么本例中的内置操作符4**(1/2)(这是平方根操作)返回结果1,而不是预期的2?如果不返回一个可接受的结果,它应该会产生一个错误,但是Python会继续工作而不会发生任何崩溃。至少在python 2.7.4 64位发行版中。

数学函数pow(4,1/2)也会发生这种情况,它返回1,没有错误。

相反,在执行4**(0.5)时,它返回的结果是2.0是正确的,尽管它混合整数和浮点数而没有任何警告。战俘也是如此。

对这种行为有什么解释吗?是否应将其视为Bug?


1/2使用底除,而不是浮点除,因为两个操作数都是整数:

1
2
>>> 1/2
0

使用浮点值,或使用from __future__ import division切换到python 3行为,其中/运算符始终使用浮点除:

1
2
3
4
5
6
7
8
9
>>> 1/2.0
0.5
>>> 4**(1/2.0)
2.0
>>> from __future__ import division
>>> 1/2
0.5
>>> 4**(1/2)
2.0

1/2给出0.5作为答案,但由于它是int/int返回int,因此它截断.5并返回0。为了得到一个float结果,其中一个数字必须是float。因此,您必须:

1
2
>>> 4 ** (1.0/2)
2.0

这非常有效,您也可以尝试:

1
2
>>> math.pow(4,1.0/2)
2.0

或者您也可以尝试:

1
2
>>> math.sqrt(4)
2.0