لماذا لا يقارب الكسر المستمر بشكل صحيح؟
-
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))
بدلاً من الحصول على 0.7 بلاه بلاه بلاه لـ E-2 ، أحصل على 0.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 متماثلان (كلهم 1) لـ 1/PHI ، ستحصل على الإجابة الصحيحة هناك.
لا تنتمي إلى StackOverflow