在Python中设计Sqrt函数

Mel*_*art 4 python python-3.x

这是一个学术练习.我正在Python中实现sqrt函数.这是我的代码,

def mySqrt(x):
    low, high = 1, x
    while low < high:
        mid = low + (high - low)/2
        if mid * mid > x:
            high = mid - 1
        elif mid * mid < x:
            low = mid
        else:
            return mid
    return low
Run Code Online (Sandbox Code Playgroud)

问题是,当数字不是一个完美的正方形时,这不起作用.我想重新设计这个函数仍然使用log n复杂度,它将sqrt的值返回到指定的小数位数.所以它就像,

def sqrt(num, param):
    pass
Run Code Online (Sandbox Code Playgroud)

从而

sqrt(5, 2) = 2.41
sqrt(5, 3) = 2.414 
Run Code Online (Sandbox Code Playgroud)

有人可以帮我弄这个吗.谢谢.

Eri*_*nil 6

你可以使用巴比伦方法.

def sqrt(x):
    n = 1
    for _ in range(10):
        print(n)
        n = (n + x/n) * 0.5
Run Code Online (Sandbox Code Playgroud)

它收敛速度极快.这是一个例子sqrt(2):

1
1.5
1.41666666667
1.41421568627
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1.41421356237
Run Code Online (Sandbox Code Playgroud)

用于sqrt(3):

1
2.0
1.75
1.73214285714
1.73205081001
1.73205080757
1.73205080757
1.73205080757
1.73205080757
1.73205080757
Run Code Online (Sandbox Code Playgroud)

现在您只需要用一个精度条件替换for循环while并返回结果而不是仅仅打印它.