舍入
shě rù
舍入是根据指定的位值,把一个数替换为附近一个更简单或精度较低的值。
Definition
舍入是指把一个数改写为附近一个更简单的值:你观察要舍入的那一位右边紧邻的那个数字,若它大于等于 $5$ 就向上进一位,若小于 $5$ 就保持原位不变。更精确地说,舍入到指定的位值,就是把一个数替换为相应 $10$ 的幂(或其他进制)的最近倍数;恰好处于中点时,标准舍入规则(四舍五入)总是向上舍入,而"银行家舍入法"(四舍六入五留双)则舍入到最近的偶数。从几何上看,舍入相当于把 $\mathbb{R}$ 投影到诸如 $10^{-k} \cdot \mathbb{Z}$ 这样的离散子集上,舍入误差分析是数值分析的核心内容:IEEE 754 浮点标准规定每次运算都要舍入到最近的可表示值,双精度下相对误差以机器精度 $\varepsilon = 2^{-52}$ 为界。
Example
把 $347$ 舍入到最接近的十位:个位数字 $7 \ge 5$,所以向上舍入为 $350$;把 $342$ 舍入到最接近的十位,个位数字 $2$ 则向下舍入为 $340$。把 $3.14159$ 舍入到 $3$ 位小数:第 $4$ 位小数是 $5$,所以向上舍入为 $3.142$;对 $2.345$ 使用银行家舍入法时,中点会被舍入到偶数一侧,结果保持为 $2.344$。累积的舍入误差会导致灾难性抵消:在双精度下计算 $(1 + 10^{-16}) - 1$ 会得到 $0$,因为 $1 + 10^{-16}$ 会被舍入为 $1.0000000000000002$,而这次减法会丢失所有有效数字。
Key Insight
当不需要精确值时,舍入能让数变得更容易处理;价格、距离和人口数量常常以舍入后的数来报告。银行家舍入法是金融和科学计算中的标准做法,因为在大量数值被舍入时,它能最大限度地减小系统性偏差,而标准舍入法则会引入轻微的向上偏差。卡汉求和算法通过跟踪一个不断更新的补偿项来抵消大规模求和中的舍入误差,把对 $n$ 个浮点数求和的精度从 $O(n \cdot \varepsilon)$ 提升到 $O(\varepsilon)$。