Реализовать обобщённый итерационный алгоритм вычисления квадратного корня (и не только), в котором все детали вынесены в функторы, в виде функции iterate
.
Потребуется три функтора:
initial
– функтор, вычисляющий начальное приближение. Для квадратного корня из x
можно взять x/2
.next
– функтор, строящий следующее приближение. Для квадратного корня: (y + x/y)/2
, где x
– аргумент функции корня, а y
– текущее приближение.enough
– предикат, оценивающий точность. Если он возвращает true
, итерационную процедуру можно завершить. Для квадратного корня можно взять fabs(x - y*y) < 1e-8
, где x
и y
имеют тот же смысл, что и выше.Таким образом, шаблонная функция iterate
будет иметь четыре параметра шаблона: тип значения и три функтора.