Если мне разрешено использовать log (ln) и exp, то, конечно, exp(log(x)/2) даст мне квадратный корень.
Предполагая, что нет:
Если наше значение, которое мы находим, sqrt равно x, а начальное значение равно y, тогда мы повторяем y->(y+x/y)/2
Завершающим условием будет либо близость y к его предыдущему значению, либо y*y к x.
С 385 в качестве значения x я получаю эти значения в своих итерациях (Excel)
1
193
97.49740933
50.7231161
29.15667189
21.1805984
19.67880541
19.62150055
19.62141687
19.62141687
Вы можете использовать «приблизительное» 2 ^ (логарифмическое основание 2 (x) / 2) в качестве начальной точки вместо 1. 385 имеет логарифм где-то между 8 и 9, поэтому, если мы скажем 8,5 и, следовательно, начнем с 2 ^ 4,25. Если мы сделаем это линейно между 16 и 32, то мы начнем с 20.
Начиная с 20 я добираюсь туда всего за 4 шага:
20
19.625
19.6214172
19.62141687
но для вычисления приблизительного логарифма и экспоненты требовались предыдущие «итерации».
person
CashCow
schedule
15.02.2011
#include <cmath>
[новая строка]double sqrt(double x) { return std::sqrt(x); }
- person James McNellis   schedule 15.02.2011#include <cmath>
[новая строка]double sqrt(double x) { return std::pow(x, 0.5); }
- person Fred Larson   schedule 15.02.2011