(define (abs x)
(if (< x 0)
(- x)
x))
(define (square x)
(* x x))
(define (cube x)
(* x x x))
(define (sqrt x)
(define (sqrt-iter old new x)
(if (good-enough? old new)
new
(sqrt-iter new (improve new x) x)))
(define (good-enough? old new)
(< (abs (- 1.0 (/ old new))) 0.001))
(define (improve guess x)
(average guess (/ x guess)))
(define (average x y)
(/ (+ x y) 2))
(sqrt-iter 1.0 x x))
(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))