浮点格式¶
浮点格式用于表示实数的有限子集。浮点格式的特性包括基数、精度和指数范围,每种浮点格式都能够表示一组不同的浮点数据。
所有的格式都能够作为数学格式,它们能够被用于表示标准规定的运算的操作数或结果。一些固定宽度的格式也能够被用于表示交换格式,它们能够被用于在不同实现之间交换浮点数据。
标准定义了五种基本格式:
- 三种二进制格式,编码长度分别为 32 位、64 位和 128 位。
- 两种十进制格式,编码长度分别为 64 位和 128 位。
标准等级¶
此处“标准”对应原文中的 “specification”。
| 第 1 级 | \( \{ -\infty, \ldots, 0, \ldots, +\infty \} \) | 扩展实数 |
| 多对一 ↓ | 舍入 | ↑ 投影到(除了 NaN) |
| 第 2 级 | \( \{ -\infty, \ldots, -0 \} \cup \{ +0, \ldots, +\infty \} \cup \mathbf{NaN} \) | 浮点数据,一个代数闭系统 |
| 一对多 ↓ | 表示标准 | ↑ 多对一 |
| 第 3 级 | \( (\mathrm{sign, exponent, significand} ) \cup \{ +\infty, -\infty \} \cup \mathbf{qNaN} \cup \mathbf{sNaN} \) | 浮点数据的表示 |
| 一对多 ↓ | 浮点数据表示的编码 | ↑ 多对一 |
| 第 4 级 | \( \mathbf{0111000 \ldots} \) | 二进制串 |
支撑起 IEEE 754 的底层数学结构是扩展实数集,即实数集加上正、负无穷大。给定一种格式,舍入操作将一个扩展实数映射到这种格式中包含的一个浮点数。一个浮点数据可以是有符号零、有限非零数、有符号无穷大或者 NaN,可以映射到一种格式中的一个或多个浮点数据表示。
一种格式中的一个浮点数据表示包含:
- 三元组 \( (\mathrm{sign, exponent, significand} ) \);基数为 \( b \) 时,三元组表示的数值为 \( (-1)^{\mathrm{sign}} \times b^{\mathrm{exponent}} \times \mathrm{significand} \)
- 正无穷大和负无穷大
- qNaN(静默 NaN)和 sNaN(信号 NaN)
一种编码将一个浮点数据表示映射到一个二进制串。编码可能会将一些浮点数据表示映射到多个二进制串。
浮点数据集合¶
一种格式能表示的有限浮点数由以下整数参数决定:
- \( b \):基数,2 或 10
- \( p \):尾数的位数(精度)
- \( \mathit{emax} \):指数 \( e \) 的最大值
-
\( \mathit{emin} \):指数 \( e \) 的最小值
对于所有格式都应满足 \( \mathit{emin} = 1 - \mathit{emax} \)。
五种基本格式的上述参数定义如下:
| \( b \) | \( p \) | \( \mathit{emax} \) | |
|---|---|---|---|
| binary32 | 2 | 24 | +127 |
| binary64 | 2 | 53 | +1023 |
| binary128 | 2 | 113 | +16383 |
| decimal64 | 10 | 16 | +384 |
| decimal128 | 10 | 34 | +6144 |
每种格式应当能表示以下的浮点数据:
- 有符号零以及 \( (-1)^s \times b^e \times m \) 形式的非零浮点数,其中
- \( s \) 是 \( 0 \) 或 \( 1 \)
- \( e \) 是任意整数,满足 \( \mathit{emin} \leq e \leq \mathit{emax} \)
- \( m \) 是能被形如 \( d_0 \cdot d_1 d_2 \ldots d_{p-1} \) 的数字串所表示的数,其中 \( d_i \) 是整数位,满足 \( 0 \leq d_i < b \)(因此 \( 0 \leq m < b \))
- 两种无穷大,\( +\infty \) 和 \( -\infty \)
- 两种 NaN,qNaN(静默 NaN)和 sNaN(信号 NaN)
只有这些数据能被表示。