exec 1.7

做个实验,依次求1的根,0.1的根,0.001 ... 很快就会发现结果稳定在0.3附近,当数足够小的时候,这个函数明显失灵了;

再试试大的数,10,100,1000 ... 当输入足够大,解释器陷入死循环;说明当数足够大的时候,这个函数也失灵了;

具体为什么,我还不能直观地理解。既然这个基本是个数学问题,我就暂时先不考虑了,有时间再研究。

但是后面的部分还是要做,判断两次迭代结果的差异来决定是否停止:

(define (square x)
  (* x x)
)


(define (good-enough last-guess this-guess)
  (< (abs(/ (- this-guess last-guess) last-guess)) 0.000001)
  )


(define (improve guess x)
  (/ (+ guess (/ x guess)) 2.0)
  )

// 引入一个新的参数,现在有两个猜测值了,分别表示上一次迭代的值和这一次迭代的值
(define (sqrt-iter last-guess this-guess x)
  (if (good-enough last-guess this-guess)
    this-guess
    (sqrt-iter this-guess (improve this-guess x) x)
  )
)


(define (my-sqrt x)
  (sqrt-iter 1.0 2.0 x))


测试了一个很小和很大的数,貌似还不错。

转载于:https://my.oschina.net/mayqlzu/blog/93939

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值