Интерпретируемый код с использованием метода Ньютона-Рафсона

У меня проблемы с кодом Java, который должен вычислять квадратный корень заданного параметра. Однако после некоторых исследований я нашел код, который, как я не знаю, был правильно реализован.

 // read in the command-line argument
    double c = Double.parseDouble(args[0]);
    double epsilon = 1.0e-15;  // relative error tolerance
    double t = c;              // estimate of the square root of c

    // repeatedly apply Newton update step until desired precision is achieved
    while (Math.abs(t - c/t) > epsilon *t) {
        t = (c/t + t) / 2.0;
    }

    // print out the estimate of the square root of c
    System.out.println(t);
  1. Первое, что я не совсем понимаю, это то, почему они делятся на два в 8-й строке.

    t = (c/t + t) / 2.0;

  2. Второе, чего я не понимаю, это условие из цикла while, если быть точнее:

    while(Math.abs(t - c/t) > epsilon*t)

  3. Не обязательно иметь только:

    while(Math.abs(t - c/t) > epsilon)


person Tr909    schedule 27.03.2019    source источник
comment
Откуда у тебя это epsilon*t? Что в этом документе/статье написано об этом выражении и почему используется фактор *t?   -  person Progman    schedule 27.03.2019


Ответы (1)


t = (c/t + t) / 2.0;

Это используется для вычисления среднего/среднего значения двух значений c/t и t. Значение сохраняется в переменной t для следующей итерации цикла. Используйте вызов System.out.println() внутри цикла while, чтобы проверить значения t и c/t до этой строки и значения после этой строки.

person Progman    schedule 27.03.2019