2014年10月18日土曜日

[SICP] 問題 1.08 : 立方根の計算

立方根をとるNewton法はyがxの立方根の近似値なら, よりよい近似は
 x / y^2 + 2y  
--------------
      3 
の値で与えられるという事実によっている. この式を使い平方根の手続きと似た立方根の手続きを実装せよ. (1.3.4節で平方根と立方根の手続きの抽象化として, 一般的なNewton法の実装法を学ぶ.)
平方根を求めるプログラムを修正して, 立方根を求めるプログラムに作り変えます. 立方根を求められるように手続きimproveを修正します. また, 手続き名に現れるsqrtをcubeに変更します. プログラムの全体は次のようになります.
(define (square x)
  (* x x))

(define (improve guess x)
  (/ (+ (/ x (square guess))
        (* 2 guess))
     3))

(define (good-enough? guess x)
  (< (abs (/ (- (improve guess x) guess)
             guess))
     0.001))

(define (cube-iter guess x)
  (if (good-enough? guess x)
      guess
      (cube-iter (improve guess x)
                 x)))

(define (cube x)
  (cube-iter 1.0 x))
実行してみます.
ようこそ DrRacket, バージョン 6.1 [3m].
言語: Pretty Big; memory limit: 2048 MB.
> (cube 8)
2.000004911675504
> (cube 10)
2.1544959251533746
> (cube 27)
3.001274406506175
> 

0 件のコメント:

コメントを投稿