SICP 2.12 要求我们定义一个构造函数make-center-percent,它接收两个參数,分别代表中心点和一个误差百分比。我们须要通过这个构造函数产生一个区间。此外还须要定义一个选择函数percent,用来获取指定区间的误差百分比。

还有就是须要实现一个center函数用于获取区间的中间点。

这里的关键就是要我们明确一个复合数据类型可能会有不同的表现形式,比方这里的区间能够用起点和终点表示,也能够使用中心点和误差表示。

从内部实现来讲,能够简单的将两种表现形式相关的数据都保存起来,比方我们同一时候记录区间的起点、终点、中心点和误差。

可是这样我们就须要在数据更新时同一时候两种数据,比方我们获得了新的起点和终点数据,那我们就必须同一时候更新起点,终点,中心点和误差这些数据,而新的中心点和误差能够依据新的起点和终点计算出来。

既然都是须要转换,还有一中实现思路就是仅仅保留一种形式的数据。当获得还有一种形式的数据时通过计算转换成第一种数据。

所以,在这里我们就依旧採用之前的起点和终点的区间数据保存形式。当我们通过make-center-percent构建区间时就通过计算把中心点和误差百分比转换成起点和终点。

代码例如以下:

(define (make-center-percent center percent)
(make-interval (- center (* center (/ percent 100))) (+ center (* center (/ percent 100)))))

这样,获取中心点的代码和书中就是一样的了,通过起点和终点相加再除于2能够得到:

(define (center i)
(/ (+ (lower-bound i) (upper-bound i)) 2))

当我们知道一个区间的起点和终点。就能够通过计算宽度再得出误差偏移量。再把偏移量除于中心点就能够得出误差相对于中心点的百分比了。这里要注意的时书中对区间宽度的定义是起点到终点距离的一半。所以这里的区间宽度恰好是它的误差偏移量。计算误差百分比的代码例如以下:

(define (percent i)
(* 100 (abs (/ (interval-width i) (center i)))))

这样就完成了演习2.12。

版权声明:本文博主原创文章,博客,未经同意不得转载。

SICP 练习 (2.12)解决摘要 :不同的实现时间的更多相关文章

  1. c++连接mysql并提示“无法解析的外部符号 _mysql_server_init@12”解决方法&提示缺少“libmysql.dll”

    课程作业要用c++连接mysql server,但是出现些小问题,经查阅资料已经解决,做一下笔记. 环境:vs2017, mysql版本是8.0.16-winx64. 设置项目属性   项目 -  C ...

  2. SICP 练习 (2.9)解决摘要:宽度和区间运算的关系间隔

    SICP 2.9 像是一个数学题,要我们证明区间的和与差的宽度是被加和被减的区间的宽度的函数,而对于乘法和除法来说不成立. 书中所谓宽度就是区间起点和终点差的一半.以我看来更像是区间宽度的一半.无论怎 ...

  3. SICP 锻炼 (2.15)解决摘要:深入思考间隔误差

    SICP 2.15 是接着 题目 2.14 的, 题目 2.14中提到了Alyssa设计的区间计算模块在并联电阻计算时会出现故障,这个问题是Lem发现的. 接着,一个叫Eva的人也发现了这个问题.同一 ...

  4. SICP 锻炼 (1.45)解决摘要

    SICP 1.45是对前面非常多关于不动点的习题的总结. 题目回想了我们之前在1.3.3节使用的不动点寻找方法.当寻找y -> x/y 的不动点的时候,这个变换本身不收敛.须要做一次平均阻尼才干 ...

  5. SICP 锻炼 (1.40)解决摘要

    SICP 锻炼1.40 是一个休闲的工作非常easy,但它看起来很复杂,单的一道题. 题目原题例如以下: 请定义一个过程cubic, 它和newtons-method过程一起使用在以下形式的表达式里: ...

  6. Mac OS 10.12 - 解决“bad interpreter: No such file or directory”问题!

    在Mac OS10.12里面执行shell脚本时候,无法执行,错误提示:“bad interpreter: No such file or directory”,经过上网搜索,最终解决了,解决方法,首 ...

  7. SQLyog 报错2058 :连接 mysql 8.0.12 解决方法

    今天闲来无事,下载新版的 mysql 8.0.12 安装. 为了方便安装查看,我下载了sqlyog 工具 连接 mysql 配置新连接报错:错误号码 2058,分析是 mysql 密码加密方法变了. ...

  8. FAIL : Keyword 'BuiltIn.Log' expected 1 to 6 arguments, got 12(解决方法)

    RF运行关键字:Run Keyword If ,log输出报错"FAIL : Keyword 'BuiltIn.Log' expected 1 to 6 arguments, got 12. ...

  9. linux0.12 解决编译问题常用命令

    解决编译问题时,经常需要修改所有的Makefile,特别定义了下面几条命令方便修改. function msed() { find -name "Makefile" -exec s ...

随机推荐

  1. Zoj 3545 Rescue the Rabbit(ac自己主动机+dp)

    标题效果: 鉴于DNA有一个正确的顺序值.请构造一个长度I的DNA在这个序列使DNA正确的顺序值极大.它被认为是负的输出噼啪. .. IDEAS: 施工顺序是,ac己主动机上走,求最大要用到dp dp ...

  2. Visual Studio 2010 将网站直接发布到远程站点

    原文:Visual Studio 2010 将网站直接发布到远程站点 这次说下如何将web应用程序直接发布到IIS服务器站点!!! 问题的由来 本人每天要发布更新的程序,所以每次更新的时候要做的工作: ...

  3. A Mathematical Curiosity

    A Mathematical Curiosity Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/O ...

  4. 3、Spring4之Bean 配置的细节

    1). 若字面值中包括特殊字符,则能够使用 value 节点的 <![CDATA[]]> 把字面值包裹起来.      <constructor-arg>           ...

  5. 最常用的动态sql语句梳理Mybatis(转)

    公司项目中一直使用Mybatis作为持久层框架,自然,动态sql写得也比较多了,最常见的莫过于在查询语句中使用if标签来动态地改变过滤条件了.Mybatis的强大特性之一便是它的动态sql,免除了拼接 ...

  6. SecureCRT 6.7.1 RI和谐 皴 补丁 方法

    它之前被使用SecureCRT 6.5.3 版本号,咋看和谐补丁,即使中国版本也可(现在才发现SecureCRT.6.2.0) 可是换为 6.7.1 后就怎么也注冊不了了.. 没办法试了各种办法: 先 ...

  7. 同ListView该接口无法通过手势滑动左右切换界面问题解决方法

    同ListView该接口无法通过手势滑动左右切换界面问题解决方法 问题描写叙述: 在做OnGestureListener滑动切换窗体的时候,会遇到这种问题.就是当界面中含有ListView的时候.On ...

  8. uva--165(邮资问题,dp)

    题意: 某国家发行k种不同面值的邮票,而且规定每张信封上最多仅仅能贴h张邮票. 公式n(h,k)表示用从k中面值的邮票中选择h张邮票,能够组成面额为连续的1.2.3,--n. n是能达到的最大面值之和 ...

  9. Android Studio如何引用jar包裹(不gradle)

    这和eclipse最大的区别.与非常人的预期开始Android Studio我们很不高兴这一套. 它直接在地图上.首先通过File->Projcet structure打开project结构界面 ...

  10. Spring FrameWork4(MVC + IOC)高速入门实例

    使用Maven创建project并配置依赖项 首先创建一个Maven Project: 然后选择创建Maven 的webapp实例,当然也能够通过命令行方式创建Maven webapp的项目再转化并导 ...