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

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 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值