了解这些浮点数是如何工作的?

Understanding how these floating point numbers work?

我在理解浮点数的工作原理时遇到一点困难。具体表现在下面(纠正我的错误):

  1. 表示0:这由指数位中的全0位表示(单精度8位,双精度11位)。如果我在指数位中全为零,即使我的尾数不全为零,我仍然能够表示零吗?

  2. 维基百科显示零表示为(−1)signbit×2^{−126}× 0.significandbits为什么最低的指数值是2^{-126}能达到的是2^{-127}吗?

  3. 表示非正规数:我想非正规数也表示为这种格式:(−1)signbit×2^{−126}× 0.significandbits。它们用于表示低于最小正常数的值。我猜这是 2^{-127},但是如果非正规数的表示就是这样,非正规数不会仍然代表比普通数更大的值吗?

  4. 归一化数:(−1)signbit×2^{exponentbits−127}× 1.significandbits。我假设指数位的实际表示是 0 到 255,因为它们不以两个补码形式表示。

  5. plus/minus 无穷大由指数位中的全 1 位表示。同样,如果我们使用此表示法表示无穷大,非零尾数是否重要?

根据 IEEE 754-2008:

  • NaN: 如果指数字段全为 1 且尾数字段不为零,则浮点数据为 NaN,与符号字段无关。优选地,QNaN 的有效位字段为 1,信令 NaN 的前导位为 0,但这不是必需的。
  • 无穷大:若指数域全为1,尾数域为0,则数据为(−1)s • ∞,其中s是符号域。 (,如果符号为0则为+∞,如果符号为1则为-∞。)
  • 正常:如果指数字段既不全为零也不全为1,则数据为(−1)s • (1 + f • 2q) • 2e - bias,其中s为符号域, f是有效位数,q是有效位数,e是指数字段,bias 是指数偏差(32 位浮点数为 127)。
  • 次正规:如果指数字段全为零,而尾数字段不全为零,则数据为(−1)s • (0 + f • 2q) • 21 - 偏差。请注意与正常值的两个区别:0 被添加到有效数字而不是 1,1 被用于指数(在减去 bias 之前)。这意味着次法线与最小法线具有相同的指数,但通过减少有效数来减少。
  • 零:若指数字段全为零,尾数字段也全为零,则数据为(−1)s • 0。(注意 IEEE 754 区分 +0 和 −0。)

次正规使用的指数是 1 而不是 0,因此数字从(正规)1.000…000•21−127 变为(次正规)0.111…111• 21−127。如果使用 0,则会跳转到 0.0111…1111•21−127.

次正规值的公式也适用于零。所以零实际上不需要在上面单独列出。