SICP問題1.8

(define (square x) (* x x))
(define (cubic x) (* x x x))
(define (cbrt-iter guess last-guess x)
  (if (cbrt-good-enough? guess last-guess)
      guess
      (cbrt-iter (cbrt-improve guess x)
                 guess
                 x)))
(define (cbrt-good-enough? guess last-guess)
  (< (abs (/ (- guess last-guess) last-guess)) 0.001))
(define (cbrt-improve guess x)
  (/ (+ (/ x (square guess)) (* 2 guess)) 3))
(define (cbrt x)
  (cbrt-iter 1.0 x x))

テスト。

(cbrt 27)
; => 3.0000005410641766
(cbrt 8)
; => 2.000000000012062
(cbrt 10)
; => 2.154434691772293
(cubic 2.154434691772293)
; => 10.000000024234794
(cbrt 1000000000)
; => 1000.0000002636338
(cubic 1000.0000002636338)
; => 1.0000000007909012e9
(cbrt 1.0e12)
; => 10000.000334749247
(cubic 10000.000334749247)
; => 1.0000001004247776e12
(cbrt 0.0001)
; => 0.04641588857275245
(cubic 0.04641588857275245)

ということでOK。