实现平方根函数sqrt

问题:实现平方根函数,不得调用其他库函数。

一、使用二分法实现

def mySqrt2(num):
    if num<0:
        return None
    if num==0:
        return 0
    pre=1e-7   #精度
    low=0.0
    high=num
    while high-low>pre:
        mid=(low+high)/2
        squre=mid*mid
        if squre>num:
            high=mid
        else:
            low=mid
    return (low+high)/2

二、使用牛顿法迭代法实现

根据牛顿法,求 A A 即求 f(x)=x2A f ( x ) = x 2 − A 的非负根, f(x)=2x f ′ ( x ) = 2 x
所以,此时的牛顿递推式为: xk+1=xkx2kA2xk=x2k+A2xk x k + 1 = x k − x k 2 − A 2 x k = x k 2 + A 2 x k ,当 xk+1 x k + 1 小于预指定的精度时,可以退出迭代。具体代码实现如下:

def mySqrt2(num):
    if num<0:
        return None
    if num==0:
        return 0
    pre=1e-7
    x0,x1=float(num),0.0
    while True:
        x1=(x0*x0+num)/(2*x0)
        if x1*x1-num<=pre and x1*x1-num>=-pre:
            return x1
        x0=x1

算法思想:改进的牛顿迭代法(先迭代求出接近x的数,在用牛顿迭代法迭代10次求解)

def mySqrt(num):
    if num==0:
        return 0
    i=0.0
    x1,x2=0.0,0.0 
    while i*i<=num:
        i+=0.1
    x1=i
    for j in range(10):
        x2=num
        x2/=x1
        x2+=x1
        x2/=2
        x1=x2
    return x2
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值