Python pow ** 结果

4
为什么这个例子中的内置运算符4 **(1/2)(即平方根操作)返回结果为1而不是预期的2?如果不能返回可接受的结果,它应该引发错误,但Python继续工作而没有崩溃。至少在Python 2.7.4 64位分布中如此。

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

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

对于这些行为有什么解释吗?它们应该被视为错误吗?

2个回答

9

1/2使用整数除法floor division,而不是浮点数除法,因为两个运算数都是整数:

>>> 1/2
0

使用浮点数值,或者使用 from __future__ import division 来切换到 Python 3 中的行为,其中 / 运算符始终使用浮点除法:

>>> 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

1/2的答案是0.5,但由于它是一个int/int类型,它返回一个int类型,因此它截断了.5并返回0。为了得到一个float类型的结果,其中一个数字必须是float类型。因此,你必须这样做:

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

这个可以完美地工作,你也可以尝试这个:

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

或者你也可以尝试这个:

>>> math.sqrt(4)
2.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接