SICPを読む(7) 問題 1.6 - 1.8
vimが落ちたので、1.6 1.7のソースは略。
問題 1.7
1.7の解答は古い値と新しい値を比べる方式。僕のは有効桁数を(/ guess 1000)しただけ。
問題 1.8 立方根を求めよ。
Newton法で展開して確認。普通にNewton法が使えるようになった。
(define (average-3 x y) (/ (+ x y ) 3)) (define (improve-3 guess x) (average-3 (/ x (* guess guess)) (* 2 guess))) (define (good-enough-3? guess x) (< (abs (- (* guess guess guess) x)) (/ guess 1000))) (define (sqrt-iter-3 guess x) (if (good-enough-3? guess x) guess (sqrt-iter-3 (improve-3 guess x) x))) (define (sqrt-3 x) (sqrt-iter-3 1.0 x)) ; test (sqrt-3 8) (sqrt-3 9) (sqrt-3 (+ 100 37)) (sqrt-3 (+ (sqrt-3 2) (sqrt-3 3))) (square (sqrt-3 1000))
う〜。解答はもっとセクシー。
cubicで3乗。cubic-rootで立方根。→立方根 - Wikipedia
つまり、sqrtはsquare-rootの略。ガーン。知らなかった・・・。
今日のリンク
Scheme:Schemeプログラマのレベル10
レベル1.5って所だな・・・。