第三章 计算机进行小数运算时出错的原因
在第三章我找到了计算机运算出错的原因:“有一些十进制的小数无法转换成二进制”。小数点后面4位二进制数表示时的数值范围为0.0000~0.1111.因此,这里只能表示0.5、0.25、0.125、0.0625这四个二进制数小数电后面的位权组合而成(相加总和)的小数。因为无法正确表示的数值,最后都变成了近似值。
那么计算机遇到循环小数时该怎么办?计算机就会根据变量数据类所对应的长度将数值从中间截断或者四舍五入。例如:0.3333…这样的循环小数从中间截断会变成0.333333,这是它的3倍是无法得出1的(结果是0.999999),计算机运算出错的原因也是同样道理。
两种表示编程语言里面全体小数分别是双精度浮点数类型(64位)和单精度浮点数类型(32位)。在c语言、Java语言、vb6.0中,双精度浮点数类型和单精度浮点数类型分别用double和float来表示。
浮点数是指用符号、尾数、基数和指数四部分来表示的小数。因为计算机内部使用的是二进制数,所以技术自然就是2。所以只考虑符号、尾数、指数三部分,就可以表示浮点数。
浮点数的内部构造(IEEE电气电子工程师学会的规定)
- 双精度浮点数(共64位) 符号部分占1位、指数部分占11位、尾数部分占52位
- 单精度浮点数(共32位)
符号部分占1位、指数部分占8位、尾数部分占23位
符号部分是指使用一个数据位来表示数值的符号。该数据位是1时表示负,为0时则表示“正或者0”。尾数部分用的是“将小数点前面的值固定为1 的正则表达式”,而指数部分用的则是“EXCESS系统表现”(EXCESS是“剩余的”意思,例如,把01111111看作是0的话,比这个数小1的01111110就是-1)。
那么问题来了如何避免计算机计算出错?
首先,回避策略,即无视这些错误。另外一个策略是把小数转换成整数来计算。
这就是第三章的主要内容。
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击