Sobes.tech
Назад к вопросам
Junior — Middle
55

Каким образом найти квадратный корень числа, используя исключительно операции сложения, вычитания, умножения и деления?

Компании, где спрашивали
ArendadataArendadata

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Квадратный корень можно находить численно, не используя встроенную функцию sqrt, например методом Ньютона. Идея проста: итеративно уточнять приближение, пока оно не станет достаточно точным. Это стандартный способ показать понимание численных методов и работы с погрешностью.

Определение:

Квадратный корень числа x — это такое число y, что y * y = x. Если нельзя использовать специализированные функции, корень обычно находят приближённо с помощью итераций. Один из самых удобных способов — метод Ньютона: берётся начальное приближение, после чего оно последовательно улучшается по формуле, использующей только сложение, вычитание, умножение и деление.

Пример использования:

def sqrt_newton(x, eps=1e-10):
    if x < 0:
        raise ValueError("Нельзя извлечь корень из отрицательного числа")
    if x == 0:
        return 0.0

    guess = x if x >= 1 else 1.0
    while True:
        next_guess = (guess + x / guess) / 2
        if abs(next_guess - guess) < eps:
            return next_guess
        guess = next_guess


print(sqrt_newton(25))   # 5.0
print(sqrt_newton(2))    # 1.4142135623...

Пояснение кода:

Код не требует отдельной встроенной функции для корня и использует только базовые арифметические операции.

  1. Проверяется, что число не отрицательное, потому что в вещественных числах корень из отрицательного числа не определён.
  2. Для 0 сразу возвращается 0.
  3. Выбирается начальное приближение: для чисел больше 1 — само число, иначе 1.0.
  4. На каждой итерации вычисляется новое приближение как среднее между текущим угадыванием и x / guess.
  5. Когда разница между двумя соседними приближениями становится меньше eps, цикл завершается.

Формула Ньютона для квадратного корня выглядит так:

next_guess = (guess + x / guess) / 2

Она работает потому, что если guess больше истинного корня, то x / guess будет меньше него, и их среднее постепенно сходится к правильному значению.

Ключевые моменты:

  • Метод Ньютона позволяет найти корень только через +, -, *, /.
  • Результат получается приближённым, поэтому нужен критерий остановки по точности.
  • Чем меньше eps, тем точнее ответ, но тем больше итераций.
  • Для отрицательных чисел в вещественной арифметике нужен отдельный подход.
  • Этот метод хорошо подходит для собеседования, потому что показывает понимание численных алгоритмов и оценки погрешности.