使用Babylonian方法的Square Root返回错误的值

问题描述 投票:1回答:2

尝试使用循环函数来查找数字的平方根。我正在尝试使用巴比伦方法,但它不会返回正确的答案。如果有人可以指出我有错误的地方,将非常感激。

def sqrt(number, guess, threshold):
    x = number / 2
    prev_x = x + 2 * threshold
    while abs(prev_x - x) > threshold:
        prev_x = x
        x = (x + guess / x) / 2
        square_root = x
        return square_root

test = sqrt(81, 7, 0.01)
print (test)
python python-3.x
2个回答
0
投票
  1. 更改 x =(x + guess / x)/ 2

因为这将进展到猜测的平方根。将其更改为

x = (x+number/x)/2
  1. 将return语句移出while循环
  2. 初始化x以猜测而不是数字/ 2

0
投票

根本不需要guess变量。你的x = number/2已经是你最初的猜测,并且在你的计算中使用任意分配的guess而不更新它你肯定不会得到正确的数字。

guess替换为number,而return仅在while循环结束时替换,并且您的代码可以正常工作:

def sqrt(number,guess,threshold):
    x = number/2
    prev_x = x+2*threshold
    while abs(prev_x-x)>threshold:
        prev_x = x
        x = (x+number/x)/2
        square_root = x
    return square_root

要实际使用guess,您应该在接近平方根时不断更新它:

def sqrt(number,guess,threshold):
    while abs(guess - number / guess) > threshold:
        guess = (guess + number / guess) / 2
    return guess
© www.soinside.com 2019 - 2024. All rights reserved.