浮点数中单精度和双精度的编码表示

计算机的世界只有0和1,为了表示浮点数,就必须要对其编码。现在大家基本上用的都是IEEE浮点编码表示,它分为单精度和双精度两种编码格式,顾名思义,双精度能表示更大的精度。

单精度占用4个字节也就是32位大小,双精度占用8个字节共64位大小。

浮点数编码成三个部分:

  1. 符号,代表正负
  2. 阶码,由它算出2的多少次幂方,也就是E
  3. 尾数,由它算出小数部分,也就是M

有了这三部分,就可以表示成这样的公式了

浮点数表示

计算E和M

上面说了E和M是计算出来的,现在就来说说怎么计算

计算E
先说公式,E=e-Bias
Bias=2^(k-1)-1
拿单精度来说,阶码占用8位,那么Bias=2^(8-1)-1=127
注意有一种特殊情况,叫做非规格化数,非规格化数也就是阶码全为0的情况,还是单精度举例,那就是8位阶码全是0,这时候就知道是非规格化数了,这时候E=1-Bias而不是0-Bias,等于-126
除了非规格化数就是用上面的公式了,比如阶码=00000011,那么E=3-127=-124

计算M
M就简单多了,主要也是分为规格化数和非规格化数情况

  1. 规格化数的情况: 尾数部分代表1.xxxxxxx这样xxxx的数,比如单精度的尾数是1,二进制0...(22个0)1,那么M=1+2^(-23)
  2. 非规格化数的情况:尾数部分代表0.xxxxxx这样的xxxx的数,还是刚才的例子,M=0+2^(-23)

深入理解计算机系统的例子

书中用到的是一个自己设定的8位的浮点数,第一位代表符号,中间4位代表阶码,最后3位代表尾数。首先Bias=2^(4-1)-1=7

浮点数中单精度和双精度的编码表示_第1张图片
image.png

你可能感兴趣的:(浮点数中单精度和双精度的编码表示)