单个精度浮点数上的第 24 个分数位在哪里?IEEE 754

Where's the 24th fraction bit on a single precision float? IEEE 754

本文关键字:在哪里 IEEE 浮点数 精度 单个      更新时间:2023-10-16

今天我发现自己在做一些位操作,我决定刷新一下我的浮点知识

事情进展得很好直到我看到这个:

有效位的23个小数位出现在存储器格式中,但总精度为24位

我读了一遍又一遍,但我仍然不知道第24位在哪里,我注意到了关于binary point的一些东西,所以我假设它是mantissaexponent之间的中间点。

我真的不确定,但我相信作者在谈论这一点:

         Binary point?
             |
s------e-----|-------------m----------
0 - 01111100 - 01000000000000000000000
           ^ this

由于标准化,第24位是隐式的。

有效位向左移动(每次位移动从指数中减去一),直到有效位的前导位为1。

然后,由于前导比特是1,因此实际上仅存储其他23个比特。

还有一个非正规数的可能性。指数存储为"偏置"格式的有符号数,这意味着它是一个无符号数,其中范围的中间定义为01。因此,对于8位,它被存储为0..255之间的数字,但0被解释为-128,128被解释为0,255被解释为127(我可能有一个fencepost错误,但你明白了)。

如果在归一化过程中,它被递减到0(意味着实际指数值为-128),则归一化停止,有效位按原样存储。在这种情况下,规范化后的隐式位取为0,而不是1。

大多数浮点硬件的设计基本上是假设数字将被归一化,所以他们假设隐式位是1。在计算过程中,他们检查非正规数的可能性,在这种情况下,他们所做的大致相当于抛出异常,并在考虑到这一点的情况下重新开始计算。这就是为什么使用非标准化的计算通常会比其他情况下慢得多。


  1. 如果你想知道它为什么使用这种奇怪的格式:IEEE浮点(和许多其他浮点一样)旨在确保,如果你将其比特模式视为相同大小的整数,你可以将它们作为有符号的2的补码整数进行比较,并且它们仍将作为浮点数字按正确的顺序排序。由于数字的符号在最高有效位(它是2的补码整数),因此被视为符号位。指数的位被存储为下一个最高有效位,但如果我们对它们使用2的补码,小于0的指数将设置该数字的第二高有效位,这将导致看起来像是一个整数的大数字。通过使用偏置格式,较小的指数保留该位,较大的指数设置该位,因此整数的顺序反映浮点的顺序

通常(请原谅双关语),浮点数的前导位总是1;因此,它不需要存储在任何地方。原因是,如果它不是1,那就意味着你选择了错误的指数来表示它;通过向左移动尾数位并使用较小的指数,可以获得更高的精度。

一个例外是非正规/亚正规数,它由指数字段中的所有零位(可能的最低指数)表示。在这种情况下,尾数中没有隐含的前导1,并且随着值接近零,精度会递减。

对于正常浮点数,存储在浮点变量中的数字是(忽略符号)1. mantissa * 2exponent-offset。前导1未存储在变量中。