为什么Python会给出“错误”的答案?
x = 16
sqrt = x**(.5)
returns 4
sqrt = x**(1/2)
returns 1
是的,我知道import math
并使用sqrt
。但我正在寻找上述答案。
答案 0 :(得分:210)
sqrt=x**(1/2)
正在进行整数除法。 1/2 == 0
。
所以你在第一个例子中计算x (1/2),在第二个例子中计算x (0)。
所以没错,这是对不同问题的正确答案。
答案 1 :(得分:93)
你必须写:sqrt = x**(1/2.0)
,否则执行整数除法,表达式1/2
返回0
。
这种行为在Python 2.x中是“正常的”,而在Python 3.x 1/2
中评估为0.5
。如果您希望Python 2.x代码的行为类似于3.x w.r.t.分部写from __future__ import division
- 然后1/2
将评估为0.5
,为了向后兼容,1//2
将评估为0
。
对于记录,计算平方根的首选方法是:
import math
math.sqrt(x)
答案 2 :(得分:16)
import math
math.sqrt( x )
这是答案链的一个微不足道的补充。然而,由于主题是非常常见的谷歌热门,我相信这值得加入。
答案 3 :(得分:10)
/
在Python 2中执行整数除法:
>>> 1/2
0
如果其中一个数字是浮点数,则按预期工作:
>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
答案 4 :(得分:7)
您所看到的是整数除法。要默认获得浮点除法,
from __future__ import division
或者,您可以将1或2的1/2转换为浮点值。
sqrt = x**(1.0/2)
答案 5 :(得分:1)
回答可能有点晚,但计算平方根的最简单准确的方法是牛顿方法。
您有一个要计算其平方根(num)
的数字,并且您猜测其平方根(estimate)
。估计值可以是大于0的任何数字,但有意义的数字会显着缩短递归调用深度。
new_estimate = (estimate + num / estimate) / 2
此行使用这两个参数计算更准确的估计值。你可以将new_estimate值传递给函数并计算另一个比前一个更准确的new_estimate,或者你可以像这样做一个递归函数定义。
def newtons_method(num, estimate):
# Computing a new_estimate
new_estimate = (estimate + num / estimate) / 2
print(new_estimate)
# Base Case: Comparing our estimate with built-in functions value
if new_estimate == math.sqrt(num):
return True
else:
return newtons_method(num, new_estimate)
例如,我们需要找到30的平方根。我们知道结果在5到6之间。
newtons_method(30,5)
number为30,估计值为5.每次递归调用的结果为:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
最后一个结果是对数字平方根的最准确计算。它与内置函数math.sqrt()的值相同。
答案 6 :(得分:0)
也许是一种简单的记忆方法:在分子(或分母)之后加一个点 16 **(1./2)#4 289 **(1./2)#17 27 **(1./3)#3
答案 7 :(得分:0)
如果要按照计算器实际执行的方式进行操作,请使用巴比伦技术。说明here和here。
假设您要计算2的平方根:
a=2
a1 = (a/2)+1
b1 = a/a1
aminus1 = a1
bminus1 = b1
while (aminus1-bminus1 > 0):
an = 0.5 * (aminus1 + bminus1)
bn = a / an
aminus1 = an
bminus1 = bn
print(an,bn,an-bn)
答案 8 :(得分:-1)
您可以使用NumPy计算数组的平方根:
import numpy as np
np.sqrt([1, 4, 9])
答案 9 :(得分:-1)
我希望下面提到的代码能回答你的问题。
from __future__ import print_function
def root(x,a):
y = 1 / a
y = float(y)
print(y)
z = x ** y
print(z)
base = input("Please input the base value:")
power = float(input("Please input the root value:"))
root(base,power)