1

为什么0 11110 1111111111不是0 11111 1111111111最高半精度数?

4

1 回答 1

7

因为 11111 2的指数字段是为无穷大和 NaN 保留的。IEEE 754-2008 标准的第 3.4 节说:

编码的偏置指数 E 的范围应包括:

  • 1 到 2 w - 2(含)之间的每个整数,用于编码正常数
  • 保留值 0 用于编码 ±0 和次正规数
  • 保留值 2 w - 1 用于编码 ±∞ 和 NaN。

这里“w”是指数字段的宽度。这不仅适用于半精度格式,还适用于所有 IEEE 754 二进制交换格式(包括通常的单精度和双精度格式)。

在 binary16 格式的特定情况下,w 为 5,符号位之后的前 5 位描述了偏置指数 E,范围从 00000 2到 11111 2。此范围内的最大值 11111 2用于无穷大和 NaN 值,底部值 00000 2用于零和次正规。剩余的有偏指数值用于表示有限正态数。因此,可用于有限数的最高偏置指数值为 2 w - 2 = 11110 2而不是 11111 2

对于这种格式,指数偏差为 15,因此位模式 0 11110 1111111111 给出的无偏指数为 30 - 15 = 15,表示值为 1.1111111111 2 × 2 15或 65504。

再举一个例子,最大的 binary32(单精度)浮点数由位模式表示

0 11111110 11111111111111111111111 2

于 2015-10-31T17:55:09.830 回答