問題 1.38
1737年、スイスの数学者 Leonhard Eulerは De Fractionibus Continuis というメモを発表した。その中に e を自然対数の底として e - 2 の連分数展開がある. この分数ではNi はすべて1、Di は順に 1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8, ...。問題1.37 の cont-frac を使い、Euler の展開により e を近似するプログラムを書け。
Ni はすべて 1 なので、
(define (n i) 1.0)
このように書けます。
Di のほうは
(define (d i) (if (= (remainder (+ i 1) 3) 0) (* (quotient (+ i 1) 3) 2.0) 1.0))
と書けます。簡単にテストしてみる。
gosh> (map d '(1 2 3 4 5 6 7 8 9 10 11)) (1.0 2.0 1.0 1.0 4.0 1.0 1.0 6.0 1.0 1.0 8.0)
cont-frac の反復プロセス版手続き。
(define (cont-frac-iter n d k) (define (iter i cf) (if (= i 0) cf (iter (- i 1) (/ (n i) (+ (d i) cf))))) (iter k (/ (n k) (d k))))
n と d を cont-frac-iter 手続きに渡せば e - 2 の近似値が求まります。
gosh> (cont-frac-iter n d 1000) 0.7182818284590453