Skip to content

舍入、机器精度与 ulp

Rounding and unit roundoff · Unit in the last place · ulp

用舍入映射、ulp 与 unit roundoff 描述实数映到邻近浮点数时的局部精度。

形式陈述

F 是给定格式的有限浮点集合。舍入映射 fl:RF 按选定方向把精确实数送到可表示数。IEEE 754 的默认方向是 round to nearest, ties to even:选择最近的浮点数;若精确值恰在两数中点,则选择最低有效位为偶数的那个。向 +、向 和向零舍入是另外三种基本方向。

对可表示数 xulp(x) 描述其末位单位,即所在 binade 中相邻浮点数的间距;跨越指数边界时需明确采用哪一侧间距。设精度为 p、基数为 β,在 round-to-nearest 下通常定义 unit roundoff

u=12β1p.

在 binary64 中 u=253machine epsilon 在不同文献和语言库中可能指 β1p,即 1 与下一个浮点数的间距,也可能被当作 u;使用时必须声明约定。

x0、舍入结果处于正规范围且没有溢出时,最近舍入满足

fl(x)=x(1+δ),|δ|u.

这是带条件的相对误差陈述。次正规区更自然的是绝对误差界;溢出会返回无穷或触发异常;精确中点的 ties-to-even 决定两侧同距时的选择,而不是消除误差。

直觉

ulp 是浮点尺在 x 附近的一格,unit roundoff 是正常范围内“最多偏半格”换算成相对尺度后的统一上界。数值越大,绝对格距越大,因此一个固定的微小增量可能在 1 附近可见,在更大的累计值旁边却落不到新的格点。

ties-to-even 让连续出现的精确中点不总朝同一方向舍入,可减少某些系统性偏差;它不保证一组实际数据的舍入误差均值为零,也不允许把误差当独立随机噪声。

例子与边界

在 binary64 中,1 的下一可表示数是 1+252。若 0<t<253,最近舍入下 fl(1+t)=1;增量不是被实数加法“吞掉”,而是精确和位于同一舍入区间。前缀累加中累计值逐渐变大时,同一个增量可能从可见变成不可见。

对正数 x 接近最小正规数时,次正规结果仍可能非常接近精确值,但 |fl(x)x|/|x| 不再受统一的 u 控制。将正常范围的相对模型无条件延伸到零附近,会把格式边界藏进错误的定理里。

正确舍入也不等于“真实结果没有误差”。它只保证返回目标格式中按指定方向最合适的数;若精确结果不可表示,误差仍然存在,只是这一步没有更好的同格式答案。

推论与应用

unit roundoff 是标准浮点算术模型的基本参数,多步误差界中的 γk 由它构造。浮点求和进一步说明相同局部舍入规则怎样随顺序和算法积累成不同总体误差。

使用舍入误差公式时应同时记录格式、舍入方向、正规/次正规范围和是否允许溢出。若实现采用融合乘加或扩展精度,中间舍入次数改变,分析路径也应相应调整,而不是事后把所有差异塞进一个模糊的“机器误差”。

参考资料
  • IEEE, IEEE Standard for Floating-Point Arithmetic, IEEE Std 754-2019.
  • David Goldberg, “What Every Computer Scientist Should Know About Floating-Point Arithmetic,” ACM Computing Surveys 23(1), 1991.
  • Nicholas J. Higham, Accuracy and Stability of Numerical Algorithms, 2nd ed., SIAM, 2002, Ch. 2.