版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014381600/article/details/61930544
1:最好的是牛顿迭代法
2:其次是二分法
a=s(19)
#不用函数实现开方
def s(n):
#循环法
if n<0:
return -1
else:
for i in range(1,n,0.001): #python 的range不能使用小数
while(i*i-n>1e-9)or(i*i-n<-1e-9):
continue
return i
#失败
def s(n):
#二分法,构造函数f(x)=x*x-n,然后构造上下界[1,n],比较mid=(start+end)/2.0,比较mid*mid-n和极小值的大小1e-9,\
#如果大于0,则将上界变小,end=mid,如果小于0,说明mid小于正确值,应该将下界变大,start=mid
#19只需要36次
i=0
if n<0:
return -1
else:
start=1
end=n
mid=(start+end)/2.0
while (mid*mid-n)>1e-9 or ((mid*mid-n)<-(1e-9)):
i=i+1
print i,mid
if (mid*mid-n>1e-9):
end=mid
elif(mid*mid-n<-1e-9):
start=mid
mid=(start+end)/2.0
print i,mid
return mid
#失败
def s(n):
#最好的用牛顿迭代法,19只需要6次
i=0
if n<0:
return -1
else:
start=1
while(start*start-n)>1e-9 or ((start*start-n)<-(1e-9)):
start=(start+n/start)/2.0
i=i+1
print i,start
return start