天天看点

IEEE754 详点

5.浮点数的几种特殊情况
 (1)0的表示 
 对于阶码为0或255的情况,IEEE754标准有特别的规定: 
 如果 阶码E 是0 并且尾数M 是0,则这个数的真值为±0(正负号和数符位有关)。 因此+0的机器码为:0 00000000 000 0000 0000 0000 0000。 
 -0的机器码为:1 00000000 000 0000 0000 0000 0000。+∞和−∞的表示 
 如果 阶码E = 255 并且尾数M全是0,则这个数的真值为±∞(同样和符号位有关)。 
 因此+∞的机器码为:0 11111111 000 0000 0000 0000 0000。 
 -∞的机器吗为:1 11111111 000 0000 0000 0000 0000。 (3)NaN(Not a Number) 
 如果 E = 255 并且 M 不是0,则这不是一个数(NaN)。6.浮点数的精度和数值范围
6.1浮点数的数值范围
 根据上面的探讨,浮点数可以表示-∞到+∞,这只是一种特殊情况,显然不是我们想要的数值范围。
 以32位单精度浮点数为例,阶码E由8位表示,取值范围为0-255,去除0和255这两种特殊情况,那么指数e的取值范围就是1-127=-126到254-127=127。
 (1)最大正数 
 因此单精度浮点数最大正数值的符号位S=0,阶码E=254,指数e=254-127=127,尾数M=111 1111 1111 1111 1111 1111,其机器码为:0 11111110 111 1111 1111 1111 1111 1111。 那么最大正数值: 
 
PosMax=(−1)S×1.M×2e=+(1.11111111111111111111111)×2127≈3.402823e+38
 

这是一个很大的数。 
 
 (2)最小正数 
 最小正数符号位S=0,阶码E=1,指数e=1-127=-126,尾数M=0,其机器码为0 00000001 000 0000 0000 0000 0000 0000。 那么最小正数为: 
 
PosMin=(−1)S×1.M×2e=+(1.0)×2−126≈1.175494e−38
 
 
1.0×2−127近似为0的,事实上,它并不等于0。
 (3)最大负数 
 最大负数符号位S=1,阶码E=1,指数e=1-127==-126,尾数M=0,机器码与最小正数的符号位相反,其他均相同,为:1 00000001 000 0000 0000 0000 0000 0000。 最大负数等于: 
 
NegMax=(−1)S×1.M×2e=−(1.0)×2−126≈−1.175494e−38
 
 
 (4)最小负数 
 符号位S=0,阶码E=254,指数e=254-127=127,尾数M=111 1111 1111 1111 1111 1111,其机器码为:1 11111110 111 1111 1111 1111 1111 1111。 计算得: 
 
NegMin=(−1)S×1.M×2e=+(1.11111111111111111111111)×2127=−3.402823e+38
 
 
6.2浮点数的精度
 说道浮点数的精度,先给精度下一个定义。浮点数的精度是指浮点数的小数位所能表达的位数。
1223=0.00000011920928955078125。所以,以十进制的精度为6位。
1252=2.2204460492503130808472633361816e−16,所以十进制的双精度浮点数的精度为15位。