Newton's method for cube roots is based on the fact that if y is an approximation to the cube root of x, then a better approximation is given by the value
Use this formula to implement a cube-root procedure analogous to the square-root procedure.
The
sqrt procedure from last exercise is pretty close to what we require here. We just need a different implementation of improve that implements the above formula and a modified version of good-enough? that uses the cube-root version of improve to test the guesses.I'm assuming the same definition of
square from exercise 1.3. Given that, here's what I came up with:(define (good-enough-cbrt? guess x)
(< (abs (- guess (improve-cbrt guess x))) (/ guess 1000000)))
(define (improve-cbrt guess x)
(/ (+ (/ x (square guess)) (* 2 guess)) 3))
(define (cbrt-iter guess x)
(if (good-enough-cbrt? guess x)
guess
(cbrt-iter (improve-cbrt guess x)
x)))
(define (cbrt x) (cbrt-iter 1.0 x))
And here's it in use:> (cbrt (* 3 3 3)) 3.0000005410641766 > (cbrt 0.5) 0.7937005260076354 > (* (cbrt 0.5) (cbrt 0.5) (cbrt 0.5)) 0.5000000000444796

No comments:
Post a Comment