【发布时间】:2019-10-08 00:46:29
【问题描述】:
我试图找到一个数的平方根,使得
abs(y**2-x) < epsilon
但是,使用二分法,我在运行它时没有得到我想要的答案。如果我选择 x 为 4 和 0.01,我希望得到 2,但相反,我得到 1.0。谁能帮我解决这个问题?
测试用例:
> squareRoot(4, 0.01)
> 1.0
def squareRoot(x, epsilon):
low = 0
high = max(1.0, x)
y = (high+low) / 2.0
while abs(y**2 - x)<epsilon:
if y**2 < x:
low = y
else:
high = y
y = (high + low) / 2.0
return y
【问题讨论】:
-
什么意思?
-
我认为您的
while条件是错误的。 -
但是 abs(y**2-x) 必须小于 epsilon
-
当然,但是当
abs(y**2-x)小于 epsilon 时,您应该返回。您不应该继续执行 while 循环并修改答案。 -
你的意思是
while abs(y**2-x) > epsilon:???