Использование метода Ньютона для вычисления функция sqrt(х)


Поставлены следующие задачи:

Используйте метод Ньютона для вычисления квадратного корня из числа. Ньютона метод включает последовательные приближения. Вы начинаете с предположения, и затем продолжить усреднения последовательных догадки, пока вы не достигнете удовлетворительный уровень точности.

Я написал следующее решение (грубо) в схеме. Можете ли вы помочь мне сделать это лучше?

(define (abs x) ((if (< x 0) - +)  x))
(define (almost-equal x y delta) 
    (> delta (abs (- x y))))

(define (sqrt-prime x last-x)
  (let ((next-x (/ (+ x last-x) 2)))
        (if (almost-equal next-x x 0.000001) x
            (sqrt-prime next-x x))))

(define (sqrt x) (sqrt-prime x 1))


1903
3
задан 23 марта 2011 в 02:03 Источник Поделиться
Комментарии
2 ответа

В корень-премьер - функция ни потребности, ни использует последние-думаю аргумент. Это может быть безопасно устранены:

(define (sqrt-prime guess x)
(if (good-enough? guess x) guess
(sqrt-prime (better-guess guess x) x)))

Вы можете вызвать функцию таким образом:

(define (sqrt x) (sqrt-prime 1.0 x))

Я чувствую, что кроме этого незначительного изменения, ваша программа достаточно емкая.

5
ответ дан 23 марта 2011 в 06:03 Источник Поделиться

АБС упоминается в R6RS, поэтому я склонен верить, что вы можете рассматривать его как примитивный.


Схема конвенции конечных предикатов с ?, так что действительно должны быть почти равны?

3
ответ дан 23 марта 2011 в 06:03 Источник Поделиться