Skip to content

定义Definition

舍入、机器精度与 ulp

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

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

形式陈述 ​

设 F 是给定浮点系统的有限可表示数集合。在不发生溢出的范围内,舍入映射 fl 按选定方向把精确实数送到 F 中的可表示数;若包括溢出,值域还需纳入相应的无穷值。IEEE 754 的默认方向是 round to nearest, ties to even:选择最近的浮点数;若精确值恰在两数中点,则选择最低有效位为偶数的那个。标准还定义 ties-to-away,以及向 +∞、向 −∞ 和向零三种定向舍入;后面统一的半 ulp 上界专指最近舍入。

对可表示数 x,ulp(x) 描述其末位单位,即所在 binade 中相邻浮点数的间距;在二进制正规区间 [2e,2e+1) 中它等于 2e−p+1。幂次边界的上下间距不同,因此跨边界谈“一个 ulp”必须声明采用哪一侧或哪套标准定义。设精度为 p、基数为 β,在 round-to-nearest 下通常定义 unit roundoff

u=12β1−p.

这里 p 计入正规数的首位有效数字;binary64 有 53 位二进制有效数字,所以 u=2−53。machine epsilon 在不同文献和语言库中可能指 β1−p,即 1 与下一个浮点数的间距,也可能被当作 u;使用时必须声明约定。

当 x≠0、精确数 x 处于正规数的数值范围且没有溢出时,最近舍入满足

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

这是带条件的相对误差陈述。若 α 是最小正次正规数,则对落入次正规舍入区的精确数,最近舍入满足

|fl(x)−x|≤α2

这里应使用绝对界,不能除以趋近于零的 x 后继续声称相对误差受 u 控制。定向舍入最多偏向相邻格点而不是半格,常数也随之改变。溢出结果由舍入方向决定,可能是无穷也可能是同号最大有限数。

直觉

ulp 是浮点尺在 x 附近的一格,unit roundoff 是正规范围内“最多偏半格”换算成相对尺度后的统一上界。数值越大,绝对格距越大,因此一个固定增量可能在 1 附近可见,在更大的累计值旁边却落不到新的格点;次正规区则反过来保持固定绝对格距,逐步失去相对有效位。

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

例子与边界

在 binary64 中,1 的下一可表示数是 1+2−52。若 0<t<2−53,最近舍入下 fl(1+t)=1;当 t=2−53 恰处中点时,ties-to-even 仍选择 1。实数加法已经形成精确和,只是它落在 1 的舍入区间,写回 binary64 后增量不再可见。前缀累加中部分和逐渐变大时,同一个增量也可能从可见变成不可见。

还可以用一个四位二进制有效数字的玩具格式逐格检查规则。在 [1,2) 内,格距为 2−3=1/8;精确数 1.07 舍入成 1.125,绝对误差 0.055<1/16,相对误差约为 0.0514<u=1/16。到了 [2,4),格距翻倍为 1/4,所以 ulp 是局部长度,而不是处处相同的常数。

次正规区的例子更直接。设最小正次正规数为 α,精确值 x=α/2 在 0 与 α 的中点,ties-to-even 把它舍入到 0。绝对误差仍满足 α/2 的界,相对误差却等于 1,远大于 u。将正常范围的相对模型无条件延伸到零附近,会把格式边界藏进错误的定理里。

正确舍入也不等于“真实结果没有误差”。它只保证返回目标格式中按指定方向最合适的数;若精确结果不可表示,误差仍然存在,只是这一步没有更好的同格式答案。把一个值先舍入到扩展精度、再舍入到目标精度还可能出现 double rounding;证明若假定每步直接正确舍入到 binary64,就必须核对实际中间格式。

推论与应用

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

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

参考资料
  • IEEE, IEEE Standard for Floating-Point Arithmetic, IEEE Std 754-2019.
  • Tobin A. Driscoll and Richard J. Braun, Fundamentals of Numerical Computation, Python online edition, §1.1 Floating-point numbers, accessed 2026.
  • 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.
关系图谱14 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组