练习1.7
(define (average x y)
(/ (+ x y) 2))
(define (improve guess x)
(average guess (/ x guess)))
(define (good-enough? guess improved-guess)
(< (/ (abs (- improved-guess guess))
guess)
0.001))
(define (sqrt-iter guess x)
(if (good-enough? guess (improve guess x))
guess
(sqrt-iter (improve guess x)
x)))
(define (sqrt x)
(sqrt-iter 1.0 x))
新的sqrt函数对于非常小和非常大的值都能给出正确答案 但书上给的示例并不行
因为对于很小的数 书上示例相当于要求求出的平方根绝对误差小于某一特定值 而本题解则相当于要求求出的平方根相对误差小于某以特定值 所以本题解所求出的平方根可以做到很精确
而对于特别大的数,因为 mit-scheme 实现的小数精度不足以表示两个大数之间的差,所以 sqrt 会陷入死循环而无法得出正确结果
引用自SICP解题集练习1-7
以上便是使用牛顿法求解平方根的过程 其中 这个式子是由牛顿法迭代方程算得
附一些知乎作为补充材料
数学XD