在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用第三条规则照样可以表示啊?
请指点~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.