浮点数的表示

http://zh.wikipedia.org/zh-cn/IEEE_754
32位单精度

单精度二进制小数,使用32个位元存储。

   1 8 23 位長
   +-+——+——+
   |S| Exp | Fraction |
   +-+——+——+
   31 30 23 22 0 位編號(從右邊開始為0)
偏正值 +127

S为符号位,Exp为指数位,Fraction为有效数位。 指数部分即使用所谓的偏正值形式表示,实际值为表示值与一个固定值 (32位的情况是127)的和。采用这种方式表示的目的是简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位S和Exp自身 的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。单精度的指数部分是−126~+127加上127 ,指数值的大小从1~254(0和255是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小。


对于float,e = 8
表示 指数 小数部分 零 0 0 非正规形式 0 非0 正规形式 1 到 2e − 2 任意 无穷 2e − 1 0 NaN 2e − 1 非零
1.0的二进制:0,01111111,00000000000000000000000


64位双精度

双精度二进制小数,使用64个位元存储。

   1 11 52 位長
   +-+——+——+
   |S| Exp | Fraction |
   +-+——+——+
   63 62 52 51 0 位編號(從右邊開始為0)
偏正值 +1023


S 为符号位,Exp为指数位,Fraction为有效数位。 指数部分即使用所谓的偏正值形式表示,实际值为表示值与一个固定值(64位的情况是1023)的和。采用这种方式表示的目的是简化比较。因为,指数的值可 能为正也可能为负,如果采用补码表示的话,全体符号位S和Exp自身 的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。双精度的指数部分是−1022~+1023加上1023 ,指数值的大小从1~2046(0(2进位全为0)和2047(2进位全为1)是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小。