gpt4 book ai didi

c++ - 单精度 float 的第 24 个小数位在哪里? IEEE 754

转载 作者:可可西里 更新时间:2023-11-01 18:04:54 25 4
gpt4 key购买 nike

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

在我看到这个之前,一切都很好:

... 23 fraction bits of the significand appear in the memory format but the total precision is 24 bits

我一遍又一遍地阅读它,但我仍然无法弄清楚第 24 位在哪里,我注意到一些关于 binary point 的东西,所以我假设它是 尾数指数

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

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

最佳答案

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

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

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

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

如果在归一化过程中将其递减为 0(表示实际指数值为 -128),则归一化停止,有效数按原样存储。在这种情况下,归一化的隐式位为 0 而不是 1。

大多数浮点硬件设计为基本上假设数字将被归一化,因此它们假设隐式位为 1。在计算期间,它们检查非正规数的可能性,在这种情况下它们大致等效抛出异常,并在考虑到这一点的情况下重新开始计算。这就是为什么 computation with denormals often gets drastically slower than otherwise .


  1. 如果您想知道它为什么使用这种奇怪的格式:IEEE float (与许多其他格式一样)旨在确保如果您将其位模式视为相同大小的整数,则可以将它们与带符号的 2 的补码进行比较整数,它们仍然会按照 float 的正确顺序排序。由于数字的符号位于最高有效位(用于 2 的补码整数),因此被视为符号位。指数的位存储为下一个最高有效位——但如果我们对它们使用 2 的补码,则小于 0 的指数将设置数字的第二个最高有效位,这将导致看起来像一个大数字作为一个整数。通过使用偏差格式,较小的指数使该位清零,较大的指数设置它,因此整数阶反射(reflect)了 float 阶。

关于c++ - 单精度 float 的第 24 个小数位在哪里? IEEE 754,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18237150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com