与 32 位一样,我们只能存储 2^32 位数据。在C语言中,我们如何存储这么大的值3.4e38。我无法理解其背后的机制。
在 IEEE-754 32 位二进制浮点格式中,32 位用作:
- 一位符号字段,s.
- 八位指数字段,e.
- 23 位有效数(小数)字段,f.
这些字段编码值:
如果所有位都打开e and f非零,该值为 NaN(非数字)。
如果所有位都打开e and f为零,则该值为 +Infinity(无穷大),如果s是 0 且 -∞ 如果s is 1.
If e is zero, the value is (-1)s(0+f•2-23)•2-126.
Otherwise, the value is (-1)s(1+f•2-23)•2e-127.
关于此的一些注意事项:
- (-1)s sets the sign. This expression is +1 if s is zero and -1 if s is one.
- 第三种情况包括零和所谓的次正规数。在这种情况下,分数字段前面会添加一个额外的零位。
- 第四种情况是正常情况。它包括大部分浮点值。在这种情况下,分数字段前面会添加一个额外的一位。
计算机硬件(或软件)以进行算术运算的方式操纵这些位。例如,当执行加法时,硬件(实际上)会移位有效数位以调整指数差异,然后添加有效数,然后舍入以适合可用的位。此外,如果加法使尾数大于可用位,则将其右移(以使其适合),并且指数增加 1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)