4

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

它也发生在没有错误pow(4,1/2)返回的数学函数上。1

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

对这种行为有什么解释吗?他们应该被视为错误吗?

4

2 回答 2

9

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

>>> 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
于 2013-08-15T10:22:37.583 回答
1

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

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

这很好用,你也可以试试这个:

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

或者你也可以试试这个:

>>> math.sqrt(4)
2.0
于 2013-08-15T11:16:58.477 回答