Как в компьютере реализуется вычисление квадратного корня. Рассмотрим пример с использованием метода Ньютона либо метод последовательных приближений, который основан на том, что имея некоторое неточное значение y для квадратного корня из числа x, мы можем с помощью простой манипуляции получить более точное значение (более близкое к настоящему квадратному корню).
Например мы можем вычислить корень из 2 следующим образом: предположим, что начальное приближение равно 1.
Реализация метода Ньютона на Lisp (Scheme):
(define (square x)(* x x))
(define (average x y)
(/ (+ x y) 2))
(define (improve guess x)
(average guess (/ x guess)))
(define (good-enough? guess x)
(< (abs(-(square guess) x)) 0.001))
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
(define (sqrt x)
(sqrt-iter 1.0 x))
Разберем все процедуры по полочкам:
1) Возведение числа в квадрат (define (square x)(* x x))
2) Узнаем среднее число
(define (average x y)
(/ (+ x y) 2))
3) Улучшение значения приближения с помощью взятия среднего между ним и частным покоренного числа и старого значения приближения.
(define (improve guess x)
(average guess (/ x guess)))
4) Если приближение достаточно хорошо походит для наших целей, то процесс закончен; если нет, мы должны повторить его с улучшены значением приближения. guess - приближение.
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
5) Обобщим код:
(define (sqrt x)
(sqrt-iter 1.0 x))



Комментариев нет:
Отправить комментарий