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

我今天发现自己做了一些操作,并决定稍微刷新我的浮点知识!

在我看到这件事之前,情况很好:

...有效数的23个小数位以内存格式出现,但总精度为24位

我一遍又一遍地读了一遍,但我仍然无法弄清楚第24位是什么,我注意到了一些关于binary point东西,所以我认为这是位于mantissaexponent之间的中间点。

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

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

由于归一化,第24位是隐含的。

有效位被左移(对于每个位移,从指数中减去一位),直到有效位的前导位为1。

然后,由于前导位是1,所以实际上只存储其他23位。

还有一个非常规数字的可能性。 指数存储为一个“偏差”格式的有符号数,这意味着它是一个无符号数,其中范围的中间被定义为0 1。因此,有8位,它存储为0到255之间的数字,但是0被解释为意味着-128,128被解释为意味着0,并且255被解释为127(我可能在那里有fencepost错误,但你明白了)。

如果在归一化过程中这个值减小到0(意味着实际的指数值为-128),则标准化停止,并且有效数据按原样存储。 在这种情况下,来自标准化的隐含比特取为0而不是1。

大多数浮点硬件被设计为基本上假设数字将被标准化,因此他们假设隐式位是1.在计算期间,他们检查非常规数字的可能性,并且在这种情况下,它们大致相当于抛出一个例外,并重新开始计算并考虑到这一点。 这就是为什么非规范计算经常会比其他方法慢得多。


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

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

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


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

    链接地址: http://www.djcxy.com/p/85521.html

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

    下一篇: What is this "denormal data" about ?