实现平方根函数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 即求 f ( x ) = x 2 A 的非负根, f ( x ) = 2 x
所以,此时的牛顿递推式为: x k + 1 = x k x k 2 A 2 x k = x k 2 + A 2 x k ,当 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

猜你喜欢

转载自blog.csdn.net/john_bh/article/details/79652282
今日推荐