浮点数 ieee 754
2015-07-10 15:18
183 查看
十进制小数转化为计算机存储过程
以9.625单精度(32位)为例
十进制数转二进制表示
9.625 = 1001.101 = 1 × 2 3 + 0 × 22 + 0 × 21 + 1 × 20 + 1 × 2-1 + 0 × 2-2 + 1 × 2-3
二进制数规范化
ieee 754规定,二进制表示必须按照格式±d.dd…d × βe , (0 ≤ d i < β)
即1001.101 = 1.001 101 * 23
存储到计算机
单精度总长32位
1-23 表述尾数:因为规范化之后的二进制数小数点左侧仅仅有一个1,所以可以省略,这样就用23位表示了24位。即尾数为1.001 101 中的001 101
24-30 表示指数:即1.001 101 * 23 中的3
31 表示符号:1表示负数 ,0表示正数
另外, 指数位有8位,可以表示0-255之间的值。但是指数有可能为负数(比如0.625 = 0.101(二进制) = 1.01 * 2-1)。所以,ieee 754规定指数为增加偏移码:把规格化后的指数值+127。这样指数的范围变为了-127 - 128。那么上面的指数变为130
按照如上规则,二进制后的小数在计算机存储为:[0] [1000 0010] [0011 0100 0000 0000 0000 000]
精度丢失
可见规范化之后的二进制数尾数部分可能远远长于23位, 那么计算机存储的时候就会丢失后面的部分。典型的是0.58。
以9.625单精度(32位)为例
十进制数转二进制表示
9.625 = 1001.101 = 1 × 2 3 + 0 × 22 + 0 × 21 + 1 × 20 + 1 × 2-1 + 0 × 2-2 + 1 × 2-3
二进制数规范化
ieee 754规定,二进制表示必须按照格式±d.dd…d × βe , (0 ≤ d i < β)
即1001.101 = 1.001 101 * 23
存储到计算机
单精度总长32位
1-23 表述尾数:因为规范化之后的二进制数小数点左侧仅仅有一个1,所以可以省略,这样就用23位表示了24位。即尾数为1.001 101 中的001 101
24-30 表示指数:即1.001 101 * 23 中的3
31 表示符号:1表示负数 ,0表示正数
另外, 指数位有8位,可以表示0-255之间的值。但是指数有可能为负数(比如0.625 = 0.101(二进制) = 1.01 * 2-1)。所以,ieee 754规定指数为增加偏移码:把规格化后的指数值+127。这样指数的范围变为了-127 - 128。那么上面的指数变为130
按照如上规则,二进制后的小数在计算机存储为:[0] [1000 0010] [0011 0100 0000 0000 0000 000]
精度丢失
可见规范化之后的二进制数尾数部分可能远远长于23位, 那么计算机存储的时候就会丢失后面的部分。典型的是0.58。
相关文章推荐
- Fragment的setUserVisibleHint方法实现
- MongoDB YUM 安装配置
- HTML5-离线缓存-升级项目笔记一
- Oracle-BPM(一)
- kafka新的producer api使用
- 编写一个函数,把一个char组成的字符串循环右移n位
- Android的MVP
- NSPredicate简单介绍
- UI编程-UIView及其⼦子类
- linux信号函数集(转载)
- Play 2.4 and Slick 3.0 Simple Example
- 提高 Vim 和 Shell 效率的 9 个建议
- 测试驱动开发TDD
- 黑马day16 jquery入门
- 机器学习技法总结(五)Adaptive Boosting, AdaBoost-Stump,决策树
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]
- 关于Android Studio出现UNEXPECTED TOP-LEVEL EXCEPTION的错误
- selenium2入门 定位 窗体切换等等 (二)
- Winform ComboBox控件高亮显示
- WPF 魔方小游戏