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

У меня проблемы с 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);

Первое, что я не до конца понимаю, это то, почему они делятся на два в 8-й строке.

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

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

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

Не будетнеобходимо иметь только:

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

1 Ответ

0 голосов
/ 27 марта 2019
t = (c/t + t) / 2.0;

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

...