Exercise 1.38: In 1737, the Swiss mathematician Leonhard Euler published a memoir De
Fractionibus Continuis, which included a continued fraction expansion for e - 2, where e is
the base of the natural logarithms. In this fraction, the Ni are all 1, and the
Di are successively 1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8, …. Write a program that uses
your cont-frac
procedure from exercise 1.37 to approximate e
, based on Euler’s expansion.
Since all the continued fraction works is done from the previous exercise the trickiest part is
defining a function for the Di’s. Procedure d
should always return 1 except for
the special indices. For me it was key to notice that every 3i-1 index, where is is i=1…n,
was the even number I care about. And that even number was of the form 2i.
(define n (lambda (i) 1.0))
(define (d i)
(if (= 0 (remainder (+ i 1) 3))
(* 2 (/ (+ i 1) 3))
1))
(define (cont-frac n d k)
(define (cf i)
(if (= i (+ k 1))
0
(/ (n i)
(+ (d i) (cf (+ i 1))))))
(if (not (> k 0))
0
(cf 1)))
(define (cont-frac-iter n d k)
(define (iter k result)
(if (= k 0)
result
(iter (- k 1) (/ (n k) (+ (d k) result)))))
(iter k 0))
> (cont-frac n d 11)
.7182818352059925
> (cont-frac-iter n d 11)
.7182818352059925
$$ e-2 = 0.7182818284590452353 $$
$$ \epsilon = |e-2-0.7182818352059925| = 0.0000000067469472647 $$