半精度 IEEE 754 中的最高(现有)数字

Highest (existing) number in half precision IEEE 754

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

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

The range of the encoding’s biased exponent E shall include:

  • every integer between 1 and 2w − 2, inclusive, to encode normal numbers
  • the reserved value 0 to encode ±0 and subnormal numbers
  • the reserved value 2w − 1 to encode ±∞ and NaNs.

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

在 binary16 格式的特殊情况下,w 为 5,符号位后的前 5 位描述有偏指数 E,范围从 000002 到 11111 2。此范围内的最高值 111112 用于无穷大和 NaN 值,000002 的最低值用于零和低于正常值。剩余的有偏指数值用于表示有限正规数。因此,可用于 finite 数的最高偏置指数值是 2w - 2 = 111102 而不是比 111112.

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

再举个例子,最大的binary32(单精度)float用位模式表示

0 11111110 111111111111111111111112