浮点数是《码出高效》第一章第二节一个内容,系统介绍了浮点数的计数方法,浮点数运算等内容以及浮点数误差的原因以及应对。
浮点数计数
首先浮点数计数方式为科学计数法,所以浮点数的计数可大体表示为,对应科学计数法浮点数也由三部分组成:符号位,阶码位以及尾数位组成。符号位很好理解为±,阶码位即上图中2的指数n,尾数即为1.4561.在实际应用过程中基于方便运算考虑运用了一些特殊的编码方式:
阶码位:
阶码位存储的是真值的移码,即真值平移一个偏移量得到的:
E为阶码,e为真值,n为二进制位数单精度为8,可换算为127
尾数位:
尾数位是位于最后的23位有效数字,尾数位值a范围为,所以最高位整数位必为1已省略。所以其实是24位有效数字。最小为1.0,最大为一个无限接近2的数值。
浮点数运算
浮点数运算主要分为零值检测,对阶操作,尾数求和,结果规格化,结果舍入等步骤
零值检测
主要是因为浮点数运算较为复杂,如果存在零值就不再运算
对阶操作
对阶操作主要是为了将阶码位对齐,并且是选择阶码小的进行阶码增加同时尾数右移以减少误差。
尾数求和
对阶之后,阶码相同即指数相同此时可以对尾数直接按位相加完成求和。
结果规格化
即将尾数向左向右移动达到形式并对阶码做对应的调整。
结果舍入
由于在对阶过程中,尾数右移导致右侧被移除位的丢失所以移除时先将移除部分保留然后根据移除部分舍入。
e.g.
运算误差:其根本原因是计算机所使用二进制01代码无法准确表示某些带小数位的十进制数据,乘二取整法
网友评论