浮点数是如何表示的

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cwt8805/article/details/82628836

如何编码浮点数?我们知道计算机表示的任何信息都是一串bit,具体内容决定于如何解释。IEEE浮点标准用

V = (-1)^s * M * 2^E

的形式来表示一个数。s表示符号(1表示负,0表示正); M表示尾数,二进制小数,取值范围为1~2或者0~1,不包括上限值;E表示阶码,对浮点数加权,这个权重是2的E次幂(可能是负数)。在单精度浮点格式中,s占用最高位1位,exp占用接下来的8位,frac占用剩下的23位。双精度中分别是(1,11,52)。
请注意前面为何不直接说E占用了多少位和M占用了多少位?因为最终E和M的值需要由exp和frac的位模式计算出来。接下来讨论单精度浮点数,exp的8个bit位取值有三种情况,下面根据每种情况分别计算E和M。

首先约定exp的值为8个bit组成的无符号数,取值为0~255。E为有符号数,取值为-126~127
frac应该解释为二进制小数,计算方式是从高位到低位的每个bit乘以2的负数幂(-1到-23),然后相加。

当exp大于0小于255时,浮点数为规格化。

E = exp - (2^7 - 1)

M = 1 + frac

当exp等于0时,浮点数为非规格化。

E = 1 - (2^7 - 1)

M = frac

非规则化可以表示0,即frac取值为0时。根据符号位分别是+0.0或者-0.0

当exp等于255时,浮点数解释为特殊值。

当frac取值0时,根据符号位分别表示+∞和-∞,无穷能表示溢出;当frac不为0时,表示NaN,当一些运算的结果不能是实数或者无穷时就会返回这个,例如计算-1开根号。

猜你喜欢

转载自blog.csdn.net/cwt8805/article/details/82628836