如何编码浮点数?我们知道计算机表示的任何信息都是一串bit具体内容决定于如何解释。IEEE浮点标准用
的形式来表示一个数s表示符号(1表示负,0表示正); M表示尾数二进制小数,取值范围为1~2
或者0~1
不包括上限值;E表示阶碼,对浮点数加权这个权重是2的E次幂(可能是负数)。在单精度浮点格式中s占用最高位1位,exp占用接下来的8位frac占用剩下的23位。双精度Φ分别是(111,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时,浮点数为规格化
当exp等于0时,浮点数为非规格化
非规则化可以表示0,即frac取值为0时根据符号位分别是+0.0或者-0.0
当exp等于255时,浮点数解释为特殊值
当frac取值0时,根据符号位分别表示+∞和-∞无穷能表示溢出;当frac不为0时,表礻NaN当一些运算的结果不能是实数或者无穷时就会返回这个,例如计算-1开根号