Рейтинг:
7
Patrice T
Я не знаю, что ты пытаешься сделать, но ... :
x/x
равно 1, и (x+x/x)
является x+1
Угадайте, что вы хотите использовать Вавилонский метод, вам нужно отслеживать квадратный корень, который вы ищете, и его текущую оценку.
Методы вычисления квадратных корней - Википедия[^]
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.
Member 13502303
Спасибо за ваш ответ. Да, вы правы. Смысл в том, чтобы использовать Вавилонский метод для вычисления квадратных корней.
Кроме того, я не уверен, что отладчик может помочь мне решить эту проблему. Я уже знаю, что некоторые странные "s" будут возвращены функцией. Я просто не знаю, как мне написать код по-другому, чтобы он работал так::
квадратный корень x =
Оценка 1: 0.5 * (s(0) + x / (s0)) = 0.5*(x+1)
Оценка 2: 0.5 * (0.5*(x+1) + x / (0.5*(x+1)))
.
.
.
Patrice T
Перейдите по первой ссылке, у вас есть пример со значениями в формулах.
До тех пор, пока вы не получите эти ценности, вы ошибаетесь.
Отладчик позволяет вам видеть, что делает код.
Member 13502303
Я воспользовался ссылкой и попробовал ее. Это совсем не помогло. И все же спасибо, что помог мне.
Patrice T
Возьмите лист бумаги, карандаш и решите задачу вручную.
перечитывайте ссылку, пока не поймете, что вы делаете.
Member 13502303
Вот чем я занимаюсь уже почти неделю. Я (думаю, что я) понимаю алгоритм, но не могу его реализовать.
Суть в том, чтобы добраться до s_n. Чем s_n вставить в s_(n-1). Чем s_(n-1) в s_(n-2) и так далее. => какая - то формула, например f(s)
И, наконец, x = 0.5*(f(s) + x / f(s))
Patrice T
если вы хотите sqrt 125348, вам нужно 125348 на каждой итерации, всегда
Проверьте с помощью отладчика.
Рейтинг:
16
Kenneth Haugland
Вам нужно сделать что-то вроде этого:
double sqrt(double S, double x, double n)
{
if (n == 0)
return x;
else
return sqrt(S,0.5*(x+S/x), n - 1);
}
S
никогда не изменится, так как это число вы хотите получить квадратный корень из него, в то время как
x
будет меняться. И вы должны угадать начальное значение x, чтобы начать с которого не может быть ноль, скажем 0.1, так что вызов может быть таким:
x_n = sqrt(S, 0.1, 10);
Если вы думаете об этом вы пытаетесь найти когда
x^2 = S
, и мы знаем, что когда
x = sqrt(S)
тот
S/x = x
, уитч, в свою очередь, означает, что
0.5*(x+S/x) = x
.