数制(待补充)

内容:

  1. 定点数
  2. 浮点数
  3. 浮点数特殊情况处理
  4. 定点数转浮点数(待补充)
  5. 参考文献

定点和浮点都表示有理数

1、定点数

定义

定点数与十进制数类似,有部分位表示整数部分,其余位表示小数部分,有一个位于整数和小数位之间隐含的二进制小数点

下图为一个带小数的二进制表达式,在b)中隐含的小数点被表示出来,c)为十进制表达式。

符号

有符号的定点数可以用二进制补码或者带符号的源码表示,最高位用于表示符号。

定点数小数点:

定点数只是位的集合,若不给出数的解释(整数位和小数位的长度),则无法知道是否存在二进制小数点。

负数补码表示形式

二进制补码表示是将数的绝对值取反,然后在最低有效位上加1。

带符号的定点数计算

下面计算0.75+(-0.625),由于存在负数-0.625,为使加法正确进行,需要将其转换为二进制补码的形式。由于计算结果超过了定点数的位宽,所以计算结果中最高位的1需要舍去。

2、浮点数

定义

浮点数与科学计数法类似,解决了定点数中整数和小数位长度固定的限制,允许表示非常大和非常小的书。

组成

浮点数由符号(sign)、尾数(mantissa,M),基数(base,B)和阶码(exponent,E)组成,如下图所示。其中二级制浮点数的基数为2.

隐含前导1(implicit leading one)

在二进制浮点数中,尾数的MSB总是1,所以不需要在尾数中存储,被称为隐含前导1。

偏置(biased)阶码

阶码需要表示正数和负数阶码,为了做到这点,浮点数使用偏置阶码,就是在原始阶码加上常数偏置32位浮点数使用的偏置是127。就是对于任意阶码,偏置阶码为:实际阶码+偏置。例如:实际阶码为7,则偏置阶码为7+127=134=10000110;对于阶码-4,偏置阶码为127+(-4)=123=01111011。下图为采用隐含前导1和偏置阶码的228浮点表示形式,符合IEEE 754浮点数标准

偏置阶码理解:以单精度浮点数为例,阶码一共为8位,可以表示-127~127共256个数,但是阶码不使用最高位作为符号位,而是以最低位为-127,最高位为127实现正负数的区分。因此对于单精度浮点数的常数偏置为2^(8-1)-1=127,双精度常数偏置为2^(11-1)-1=1023。

单精度和双精度格式

32位浮点数成为单精度浮点数(singal-precision,single或float),IEEE 754标准还定义了64位双精度浮点(double-precision、double)。

浮点数舍入

在有效精度外的算数结果数必须四舍五入到最近的值。舍入模式有:1) 向上舍;2) 向下舍;3) 向零舍;4) 向最近端舍(默认方式,如果两端距离相同,保留为小数部分最低有效位为0的数)如果数值部分太大会产生上溢,舍为±∞;数值太小会产生下溢,舍为0。

浮点数加法:

  1. 提取阶码和小数位;
  2. 加上前导1,形成尾数;
  3. 比较阶码;
  4. 如果需要,对较小的尾数移位;
  5. 尾数相加;
  6. 规范化尾数,并在需要时调整阶码;
  7. 舍入结果;
  8. 把阶码和小数组成浮点数。

3、浮点数特殊情况

特殊值与阶码的关系:

  32位浮点数的阶码域可以表达-127~128,其中-127(全0)和128(全1)用于保存为特殊值,-126~127表示常规指数范围。

IEEE浮点数标准用特殊方式表示0,±∞,非规范数和NaN结果,通常采用全0或者全1填充阶码解决特殊情况

  • 0:因为隐含前导1,所以在浮点数表示中数字0的表示需要特殊表示;
  • 无穷大:上溢结果舍入为无穷,并非最大的浮点数(因为相差太大而毫无意义);
  • NaN:表示不存在的数;
  • 非规范化数:当浮点数的指数允许为最小指数时,尾数不必是规范化的,指数域值为emin-1用于区分规范化和非规范化数;

下图为这三类结果的表示方法。

4、定点数转浮点数

参考文献:

《数字设计和计算机体系结构》

http://blog.sina.com.cn/s/blog_5f853eb10100smox.html

原文地址:https://www.cnblogs.com/lizhiqing/p/12936529.html