SICP题解----第1.1节练习
2014-09-24 10:00
239 查看
第1.1节的练习包括习题1.1到1.8
其中习题1.1--1.6在构造过程抽象的第一节已经给出。
下面给出练习1.7和练习1.8的题解。
可以发现,对于特别小的数,比如 0.00009 ,书本给出的 sqrt 并不能计算出正确的答案; 而对于特别大的数,因为实现的小数精度不足以表示两个大数之间的差,所以 sqrt 会陷入死循环而无法得出结果。
要避免这一错误,我们按照练习所说,对 good-enough? 进行修改:不再检测猜测值 guess 的平方与 x 之间的差,而是检测新旧两次猜测值之间的比率,当比率变化非常小时,程序就停止 improve 。
新的 good-enough? 定义如下:
结果如下:
其中习题1.1--1.6在构造过程抽象的第一节已经给出。
下面给出练习1.7和练习1.8的题解。
练习1.7
首先观察课本上的程序的问题.可以发现,对于特别小的数,比如 0.00009 ,书本给出的 sqrt 并不能计算出正确的答案; 而对于特别大的数,因为实现的小数精度不足以表示两个大数之间的差,所以 sqrt 会陷入死循环而无法得出结果。
要避免这一错误,我们按照练习所说,对 good-enough? 进行修改:不再检测猜测值 guess 的平方与 x 之间的差,而是检测新旧两次猜测值之间的比率,当比率变化非常小时,程序就停止 improve 。
新的 good-enough? 定义如下:
(define (good-enough? old-guess new-guess x) ; old-guess*newguess/x -1 (< (abs (- (/ (* old-guess new-guess)x) 1))
结果如下:
练习1.8
只需简单修改牛顿法求平方根即可。相关文章推荐
- SICP 练习1.11
- 【SICP练习】55 练习2.23
- 【SICP练习】22 练习1.28
- 【SICP练习】75 练习2.46
- 【SICP练习】10 练习1.16
- 【SICP练习】107 练习3.8
- 【SICP练习】16 练习1.22
- 【SICP练习】62 练习2.33
- 【SICP练习】131 练习3.62
- 【SICP练习】147 练习4.3
- 【SICP练习】123 练习3.54
- 简单题目练习一,题解(C++版)
- 2018年全国多校算法寒假训练营练习比赛(第五场)题解
- 【SICP练习】4 练习1.8
- 【SICP练习】151 练习4.7
- 【SICP练习】25 练习1.31
- 【SICP练习】38 练习1.43
- 【SICP练习】60 练习2.30
- 【SICP练习】76 练习2.47
- 【SICP练习】83 练习2.55