在c/c++语言中,单精度浮点数float的二进制存储方式如下:
1位符号位(S) + 8位指数位(E) + 23位尾数位(M)
最后表示成十进制是:
1. if E == 0 and M == 0: N=0
2. if E == 0 and M != 0: N= ((-1)^S) * ( (2^(-126)) * 0.M )
3. if E > 0 and E < 255 and M != 0: N= ((-1)^S) * ( (2^(E-127)) * 1.M)
4. if E == 255: 特殊字符
请教各位,为什么有了第3条规则还要第2条呢?
阮一峰老师: http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html
文章中说,第2条规则的存在原因:
(2)E全为0。这时,浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。
但是±0用第三条规则照样可以表示啊?
请指点~