立方根を求める手続きを作成せよ
- improveのみ、立方根の手続きに変更すれば良い
- せっかくなので、good-enough?等はAnswerBook1.7を参考に作ることにした
- 共通関数は別ファイルにまとめることにした(sicp-lib.scm - おんがえしの日記)
(load "sicp-lib.scm") (define (cbrt x) (define (cbrt-iter old new x) (if (good-enough? old new) new (cbrt-iter new (improve new x) x))) (define (good-enough? old new) (< (abs (- 1.0 (/ old new))) 0.001)) (define (improve guess x) (/ (+ (/ x (square guess)) (* guess 2)) 3)) (cbrt-iter 1.0 x x)) ; 検証用手続き (define (cbrt-test x) (/ (cube (cbrt x)) x)) ; 精度テスト (cbrt-test 1.0) ; 1.0 (cbrt-test 2.0) ; 1.00000193029137 (cbrt-test 0.000001) ; 1.00000010042478 (cbrt 1e10) ; 1.00000048110827