exercise 1.7:这道题有个前提,很大和很小的数都是不溢出,若是溢出就没意义了。原始的good-enough?是平方后与待求平方根的值相减再比较结果是否小于0.001,这很明显有问题,若是待求的数的平方根小于0.001,不管怎么减都是小于0.001的。很大的数没法精确算到0.001,会一直循环。scala
exercise 1.8:common lisp实现以下code
(defun cuberoot (xx) (defun improve (x y) (/ (+ (/ x (* y y)) (* 2 y)) 3)) (defun good-enough? (x y) (< (/ (abs (- (* y y y) x)) x) 0.001)) (let ((prev 0.0)) (defun good-enough?2 (y) (if (< (abs (- y prev)) 0.001) t (progn (setf prev y) nil)))) (defun cuberoot-iter (x y) (if (good-enough? x y) y (cuberoot-iter x (improve x y)))) (cuberoot-iter xx 1.0))