半精度 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
为什么最高半精度数是 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