Функция цикла, чтобы найти квадратный корень числа - PullRequest
0 голосов
/ 17 сентября 2018

Вопрос в том, Чтобы найти квадратный корень числа «N», используя эту процедуру, мы должны реализовать следующий процесс:

  1. Угадай значение для квадратного корня из N
  2. Разделите N на это предположение
  3. Среднее значение результата с исходной оценкой, чтобы получить новую оценку
  4. Перейти к шагу 2 и повторить

Я установил код для возврата Guess, если он находится в пределах 0,5 от предыдущего Guess, и если функция не повторяется. Я не уверен, как заставить это повториться или как замкнуть петлю.

def SqrRt(Number,Guess):
while Guess2 == ((Estimate+Guess)/2):
    if (Estimate - Guess2) <= 0.5:
        return Guess2
    elif (Estimate - Guess2) >= -0.5:
        return Guess2
    else:
       Estimate = (Number/Guess)
    Guess2 = Estimate + 1

answer = SqrRt (34567823321421,500000) печать (ответ)

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Первый раз

Вам нужен код, который вообще будет работать для такого вопроса. Я полагаю, что ваш код должен выглядеть примерно так:

def SqrRt(Number,Guess):
    while Guess2 == ((Estimate+Guess)/2):
        if (Estimate - Guess2) <= 0.5:
            return Guess2
        elif (Estimate - Guess2) >= -0.5:
            return Guess2
        else:
           Estimate = (Number/Guess)
        Guess2 = Estimate + 1
answer = SqrRt(34567823321421,500000)
print(answer) 
#Number to Use - 34567823321421
#Answer - 5879440.732
0 голосов
/ 17 сентября 2018

Использование вавилонского метода означает решение (S ^ 2 - V) = 0. Здесь S - это квадратный корень из V, который нужно найти. Применение аппроксимации Ньютона приводит к итеративному методу, в котором 'x_new = (x_prev + V / x_prev) / 2'. Первый 'x_prev' должен быть оценен.

Итерация сходится монотонно. Таким образом, проверка на дельту в разработке достаточна.

x      = V / 2.0       # First estimate
prev_x = x + 2 * Delta # Some value for that 'while' holds
while abs(prev_x - x) > Delta:
    prev_x = x
    x      = (x + S/x) / 2.0
square_root = x

Выберите Delta, чтобы он был сколь угодно мал (например, 0,0001).

...