問題 1.39
正接関数の連分数展開は1770年にドイツの数学者 J. H. Lambert が発表した。xをラジアンで表し、
(数式は「tan 連分数」などでググって調べてください。)
Lambert の式に基づいて正接関数の近似値を計算する手続き (tan-cf x k) を定義せよ。k は問題1.37と同様、計算する項数を指定する。
(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))))
これはいつもの cont-frac 手続きの反復プロセス版です。
(define PI 3.1415926535897932) (define (tan-cf x k) (define (n i) (if (= i 1) (* x 1.0) (* x x 1.0))) (define (d i) (- (* 2.0 i) 1)) (cont-frac-iter n d k))
tan-cf はこんな風に書けます。
なお、ラジアンを扱うので PI を定義しておきます。
では、tan-cf 手続きを用いて tan30° を求めてみます。
度数法で 30° は π/6 ラジアンです。
gosh> (tan-cf (/ PI 6) 1000) 0.5773502691896257