#牛顿-拉弗森法和二分查找法寻找近似平方根的比较
def binary(x):
epsilon=0.001
num=0
low=0.0
high=max(1.0,x)
ans=(high+low)/2.0
while abs(ans**2-x)>=epsilon:
num+=1
if ans**2<x:
low=ans
else:
high=ans
ans=(high+low)/2.0
print(num)
print(ans)
def newton(k):
epsilon=0.001
p=k/2.0
i=0
while abs(p**2-k)>=epsilon:
p=p-((p**2-k)/(2*p))
i+=1
print(i)
return p
k=input()
p=newton(int(k))
print(p)
binary(int(k))
通过自定义的输入后的输出结果可以发现,牛顿拉弗森法迭代的次数远远少于二分法。
牛顿拉弗森法通过导数来寻找下一次的适配值更有效率。