У меня проблемы с кодом 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)
epsilon*t
? Что в этом документе/статье написано об этом выражении и почему используется фактор*t
? - person Progman   schedule 27.03.2019