Почему Bleep не моя постоянная фракция, приближающаяся правильно?
-
28-09-2019 - |
Вопрос
Чтение через больше SICP, и я застрял на Упражнение 1.3.8.. Отказ Мой код работает правильно для аппроксимации 1 / PHI, но не работает для аппроксимации e - 2.
(define (cont-frac n d k)
(define (frac n d k)
(if (= k 0)
1.0
(+ (d k) (/ (n (+ k 1)) (frac n d (- k 1))))))
(/ (n 1) (frac n d k)))
(define (eulers-e-2)
(cont-frac (lambda (i) 1.0)
(lambda (i)
(if (= (remainder (+ i 1) 3) 0)
(* 2.0 (/ (+ i 1) 3))
1.0))
100))
(define (1-over-phi)
(cont-frac (lambda (i) 1.0)
(lambda (i) 1.0)
100))
Вместо того, чтобы получить .7 бла бла бла за е-2, я получаю. 5 бла-бла-то что-то. Я не могу понять, почему. Я уверен, что у меня есть «D», определенный правильно в функции «EULERS-E-2».
Редактировать: Спасибо, ребята, я рассчитал его назад. Вот фиксированный код.
(define (cont-frac n d k)
(define (frac n d i)
(if (= k i)
(d i)
(+ (d i) (/ (n (+ i 1)) (frac n d (+ i 1))))))
(/ (n 1) (frac n d 1)))
Решение
Вы, кажется, вычисляете следующее:
N1/(D100 + (N101/ D99 + N100/(D98 + N99/(..))))
Вместо
N1/(D1 + N2/(D2 + ...))
Поскольку n и d такие же (все 1s) для 1 / PHI, вы получаете правильный ответ там.
Не связан с StackOverflow