Por que o bipe não é minha fração contínua que se aproxima corretamente?
-
28-09-2019 - |
Pergunta
Lendo mais sicp e estou preso Exercício 1.3.8. Meu código funciona corretamente para aproximar 1/phi, mas não funciona para aproximar 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))
Em vez de conseguir .7 blá blá blá para e-2, estou recebendo alguma coisa .5 blá blá. Não consigo descobrir o porquê. Tenho certeza de que tenho "D" definido corretamente na função "Eulers-E-2".
EDIT: Obrigado pessoal, eu estava calculando -o para trás. Aqui está o código fixo.
(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)))
Solução
Você parece estar calculando o seguinte:
N1/(D100 + (N101/ D99 + N100/(D98 + N99/(..))))
Ao invés de
N1/(D1 + N2/(D2 + ...))
Como N e D são os mesmos (todos 1s) para 1/phi, você obtém a resposta certa lá.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow