浮点数的定义 - IEEE 754 标准

数字的存储是关于“精度”与“范围”的权衡。传统的定点数(Fixed-point)虽然简单高效,但在面对极大的天文数字或极小的物理常量时,往往显得捉襟见肘。为了打破这种局限,IEEE 754 标准引入了让小数点“浮动”起来的设计方案。 但指数偏差、隐式前导位、正规数等概念不够直观,本文将通过构建一个简单的 8-bit 浮点系统,重新梳理定点到浮点的演进路径,理解藏在比特位底层的设计逻辑与权衡。 定点数 1. “定点"表示的整数 4-bit无符号整数可以用下面这种方式来表示: 整数不存在小数点,也可以说我们默认小数点固定在整数的末尾,所以整数的表示也可以看作是“定点”。 2. 定点表示的小数 使用7位二进制,前4位表示整数部分,后3位表示小数部分,可以这样表示: $$ \begin{array}{c:c:c:c|c:c:c} 2^3 & 2^2 & 2^1 & 2^0 & 2^{-1} & 2^{-2} & 2^{-3} \end{array} $$ 小数点固定在第4、第5个比特之间,分别计算每个位置的值并求和即可得到这段二进制表示的小数值: 可以表示的范围是 $[0.0, 15.875]$,表示的数之间的最小间隔是 $0.125$,并且间隔是均匀的。 定点数的特点: 定点数和整数的表示很接近,计算也像整数一样简单高效; 几乎可以重用为整数运算设计的硬件; 表示的数值间隔均匀,但是整体范围较小。 浮点数 为了方便理解,我们还是从最简单的无符号整数开始,逐步定义出浮点数。 4-bit可以表示出集合 $A=\{i|0\leq i \leq 15, i\in \Z\}$,如果把它们看作 $2$ 的指数,就可以表示出数值更大的集合 $B=\{2^i|i\in A\}$,但是数据变得非常稀疏,并且是距离0越远越稀疏。 前 $4$ 位二进制可以称为指数(Exponent),简写为 $E$;为了表示小数,我们再加入 $3$ 位尾数(Mantissa),简写为 $M$,尾数部分和之前的计算方式相同: $$ \begin{array}{c:c:c} 2^{-1} & 2^{-2} & 2^{-3} \end{array} $$ ...

September 17, 2024 · 2 min · Slightwind