首页 > 解决方案 > Python的while循环平方根问题,返回低小数精度

问题描述

我们需要找到平方根近似值。第一个近似值是

x_0 = n / 2

,其中 n 是我们要平方根的数字。那么 k 近似值将是:

x_(k+1) = (x_k + n / x_k) / 2

问题是我们需要找到其平方在 number 范围内的平方根近似值a。所以换句话说,在abs(n-a)

所以我尝试解决这个问题:

def square_root_precision(n, a):
    approx_zero = n / 2
    approx_one = 0
    while approx_one ** 2.0 <= abs(n - a):
        approx_one = (approx_zero + n / approx_zero) / 2
        approx_zero = approx_one
    return approx_one

所以问题是我的函数 for n = 2anda = 0.000001返回1.5而不是1.4142135623746899

我多次查看代码。函数精度有问题吗?

如果我们只用循环而不用高级函数来解决这个问题,那就太好了。

标签: pythonmathprecision

解决方案


abs(n - a)评估为1.999999并且一旦approx_one评估为1.5好,1.5 * 1.5 >= 1.999999所以它返回你的1.5.

您想approx_one ** 2.0 <= abs(n - a)用新计算的近似值与最后一个小于 的绝对差值替换您的值a

例如:

def square_root_precision(n, a):
    approx_zero = n / 2
    approx_one = 0
    while True:
        approx_one = (approx_zero + n / approx_zero) / 2
        if abs(approx_one - approx_zero) < a:
            return approx_one
        approx_zero = approx_one

square_root_precision(2, 0.001)

1.4142135623746899


推荐阅读