不用sqrt()函数,如何求平方根

版权声明:本文为博主原创文章,未经博主允许不得转载。 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 

猜你喜欢

转载自blog.csdn.net/u014381600/article/details/61930544
今日推荐