python - 在 Python 中设计 Sqrt 函数

标签 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

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

def sqrt(num, param):
    pass

因此

sqrt(5, 2) = 2.41
sqrt(5, 3) = 2.414 

谁能帮我解决这个问题。谢谢。

最佳答案

您可以使用 Babylonian method .

def sqrt(x):
    n = 1
    for _ in range(10):
        print(n)
        n = (n + x/n) * 0.5

收敛速度极快。以下是 sqrt(2) 的示例:

1
1.5
1.41666666667
1.41421568627
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1.41421356237

对于 sqrt(3):

1
2.0
1.75
1.73214285714
1.73205081001
1.73205080757
1.73205080757
1.73205080757
1.73205080757
1.73205080757

现在您只需将 for 循环替换为 while 和一个精度条件并返回结果,而不仅仅是打印它。

关于python - 在 Python 中设计 Sqrt 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47741833/

相关文章:

python - 为什么我的 Flask 网站没有运行 CSS 文件?

Python 的属性装饰器没有按预期工作

Python:使用循环创建函数

python - 如何使用对象比较函数反转 heapq 堆中元素的顺序?

python - 是否有一个 python 标准函数可以将字符串解析为 argv 列表,就像 Python 中的 bash 一样?

python - 弹性查询失败,并显示以下错误异常:TransportError(400,u'search_phase_execution_exception',u'无法解析查询[*/abc *]')

python - 我如何生成一个假设策略来生成一个列表,该列表至少包含它从中采样的每个元素中的一个?

python - 使用 python 将文件拆分为许多其他文件

python - 如何根据单词列表对字符串的单词进行分组?

python-3.x - 将上市公司数据的 HTML 读取到 Dataframe 中