SICP 习题 (2.15)解题总结:区间误差的深入思考

本篇博客主要讨论SICP习题2.15,涉及Alyssa的区间计算模块在并联电阻计算时的误差问题。Eva提出使用公式'1/(1/R1 + 1/R2)'而非'(R1*R2)/ (R1 + R2)'能减少误差。通过分析区间除法的误差扩大现象,证明了当使用确定区间one(1 1)时,公式不会导致误差增大,从而支持了Eva的观点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SICP 习题 2.15 是接着 题目 2.14 的, 题目 2.14中提到了Alyssa设计的区间计算模块在并联电阻计算时会出现问题,这个问题是Lem发现的。接着,一个叫Eva的人也发现了这个问题,同时她还有更深入的思考。


Eva觉得,如果一个公式可以写成一种形式,其中具有非准确性的变量不重复出现,那么Alyssa的系统产生的区间的限界会更紧一些。

因此,她觉得在计算并联电阻时,公式“1/(1/R1 + 1/R2)”比公式“(R1*R2)/ (R1 + R2)”要更好一些。


题目要求我们去看看Eva说的对不对。



要理解题目的意思有点困难,主要是不知道这里的“具有非准确性的变量”什么意思。

不过我们可以根据我们在习题2.14中观察到的现象来做一个直观的推断。

我们在习题2.14中发现,Alyssa的区间除法会出现问题,两个区间相除会扩大误差。

不过,一个值得注意的是,实现公式“1/(1/R1 + 1/R2)”时Lem定义了一个叫one的区间,值是(1 1),这是一个确定区间,没有误差,在区间除法中使用它是不会带来误差扩大的问题的。

比如one/(100 200),就是


(1 1) / (100 200)

=> (1 1) * (1/100  1/200)


=> (1/100  1/200)


进一步计算one / (one / (100 200))的话,就是

 (1 1) /  (1/100  1/200)

(1 1) * (100 200)

(100 200)


也就是说,如果我们有定义区间one为(1 1),那么one/(one/A)还是A,不会带来区间误差变大的问题。


所以,就如题目2.15提到的,使用了one的程序part2是一个比较好的程序。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值