在这个wiki article中,它显示23位精度,8位表示指数,1表示符号
浮点类型中隐藏的第24位在哪里使得(23 + 1)为7个有效数字?
答案 0 :(得分:5)
浮点数通常是标准化的。例如,考虑科学记数法,因为我们大多数人都是在学校里学到的。您总是缩放指数,因此小数点前面只有一位数。例如,代替123.456,编写1.23456x10 2 。
计算机上的浮点通常以相同的方式处理(几乎 1 ):数字被标准化,因此在二进制点之前恰好有一个数字(二进制点,因为大多数工作在二进制而不是十进制) 。但是有一个区别:在二进制的情况下,这意味着小数点之前的数字必须为1
。由于它始终是1
,因此不需要存储该位。为了在每个浮点数中保存一点存储空间,1
位是隐含的而不是存储的。
与往常一样,情况只是比这更多。主要区别在于非规范化数字。例如,考虑一下,如果您使用的是科学记数法,但您只能使用-99到+99之间的指数。如果你想存储一个像1.234 * 10 -102 这样的数字,你就不能直接这样做,所以它可能只是向下舍入到0。
非规范化数字为您提供了解决这个问题的方法。使用非规范化数字,您将其存储为0.001234 * 10 -99 。假设(通常是计算机上的情况)尾数和指数的位数都是有限的,这会损失一些精度,但仍然可以避免抛弃所有精度并只是调用它{ {1}}。
1 从技术上讲,存在差异,但它们对所涉及的基本理解没有任何影响。
答案 1 :(得分:2)
真正的意义包括23 分数位在右边 二元点和隐式领导 位(在二进制点的左侧) 值为1,除非指数为 存储全零
很好地解释,按照惯例/设计,最后一位没有明确存储,而是通过规范表明它存在,除非一切都是0'os。
答案 2 :(得分:2)
在编写时,单精度浮点格式有一个符号位,八个指数位和23个有效位。设s是符号位,e是指数位,f是有效位。以下是各种位组合的含义:
如果e和f为零,则根据s是0还是1,对象为+0或-0。
如果e为零且f不为,则对象为(-1) s * 2 1-127 * 0.f. “0.f”表示写入0,周期和f的23位,然后将其解释为二进制数字。例如,0.011000 ......是3/8。这些是“次正规”数字。
如果0< e< 255,对象是(-1) s * 2 e-127 * 1.f. “1.f”类似于上面的“0.f”,除了从1开始而不是0开始。这是隐含位。大多数浮点数都采用这种格式;这些是“正常”数字。
如果e为255且f为零,则根据s是0还是1,对象为+无穷大或无穷大。
如果e为255且f不为零,则对象为NaN(非数字)。 NaN的f字段的含义取决于实现;它没有完全由标准规定。通常,如果第一位为零,则它是信令NaN;否则它是一个安静的NaN。