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. 【原创】leetCodeOj --- Majority Element 解题报告(脍炙人口的找n个元素数组中最少重复n/2次的元素)

    题目地址: https://oj.leetcode.com/problems/majority-element/ 题目内容: Given an array of size n, find the ma ...

  2. 移动web:转盘抽奖(幸运大转盘)

    为了获取客户.回馈客户,平台一般会推出抽奖活动类的营销页.因此web页面中,有各式各样的抽奖效果. 格子式(九宫格),背景滚动式(数字/文字/图案),旋转式(转盘),游戏式(砸蛋/拼图...).... ...

  3. lua、groovy嵌入到java中的性能对比(转)

    lua和groovy都是可以嵌入到java中的脚本语言.lua以高性能著称,与C/C++在游戏开放中有较多使用,groovy是一个基于Java虚拟机(JVM)的敏捷动态语言,在jvm下有着不错的性能. ...

  4. Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

    问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...

  5. 调用CachedRowSetImpl类时,为什么会出现这样的错误

    Access restriction: The type CachedRowSetImpl is not accessible due to restriction on required libra ...

  6. JAVA实现DAO基本层CRUD操作

    随着shh2各种操作方便框架.越来越多JAVA WEB效率,可是,假设在不了解这些框架使用的场合的情况下,一拿到项目就盲目地选择这些框架进行系统架构的搭建,就有可能造成非常多不是必需的资源浪费. 在项 ...

  7. Java新手入门的30个基本概念

    Java已经成为一个庞大而复杂的技术平台,对于开发者而言,特别是刚開始学习的人,要想更好的掌握Java技术,深入理解基本概念不可缺少,能够帮助你提高对Java的进一步了解.以下为你介绍了Java语言的 ...

  8. Android - 用Fragments实现动态UI

    要在Android上实现动态的多窗口的用户交互界面,需要把UI组建和activity放到modules中, 这样才能划进划出activity.可是使用Fragment类来创建modules,它就像一个 ...

  9. java javaEE javaWEB J2EE程序猿猿程序是脑损伤,终身工作程序猿

    这几天我越来越郁闷.程序员现在很火----特javaEE员. 但我觉得火只是给人们的工作程序员. 原因 javaweb该项目是非常大的.没听过那个码农能单独接到什么项目.仅仅能被人剥削. 有人不信,我 ...

  10. linux shell中间$0,$?,$!和<<'END'

    变量说明: $$ Shell自己PID(ProcessID) $! Shell背景上次执行Process的PID $? 最后执行的命令结束码(回报值) $- 使用Set命令设定的Flag一览 $* 全 ...