形式陈述
本页把浮点语义绑定到 IEEE 754-2019 的指定二进制格式与最近舍入模式。对基本二元运算 公理库 二元运算 Binary operation · Internal composition law 把集合中任意一对有序元素映回该集合的函数。 ∘ ∈ { + , − , × , ∇ ⋅ } ,当精确结果为零,或其绝对值处于正规有限数的数值范围且没有溢出时,可使用标准相对误差模型
fl ( x ∘ y ) = ( x ∘ y ) ( 1 + δ ) , | δ | ≤ u , 其中 u 是该格式和舍入模式对应的unit roundoff 公理库 舍入、机器精度与 ulp Rounding and unit roundoff · Unit in the last place · ulp 用舍入映射、ulp 与 unit roundoff 描述实数映到邻近浮点数时的局部精度。 。这是一项分析假设:它把每步舍入包装为对精确结果的小相对扰动,不声称 δ 随机、独立或具有某个概率分布。
若要覆盖渐进下溢,可令 α 为最小正次正规数,并使用混合模型
fl ( z ) = z ( 1 + δ ) + η , | δ | ≤ u , | η | ≤ α 2 , 其中当精确值 z 位于正规数的数值范围内时,可取 η = 0 ;不能只检查舍入后的输出是否正规。精确值为零时也可取 δ = η = 0 。这条式子仍排除溢出、NaN 与无穷,也假定硬件没有 flush-to-zero。FMA 把 a b + c 作为一次融合运算只舍入一次,必须单独计数,不能冒充先乘后加的两次基本运算。
连续 k 个局部因子的乘积常用 θ k 压缩表示。若 k u < 1 ,则存在 θ k 使
∏ i = 1 k ( 1 + δ i ) ρ i = 1 + θ k , | δ i | ≤ u , ρ i ∈ { − 1 , 1 } , 并有
| θ k | ≤ γ k , γ k = k u 1 − k u . γ k 在 k u ≪ 1 时约为 k u ,但条件 k u < 1 不能省略。对按固定顺序计算的点积,可由模型推出典型的分量界
| fl ( x T y ) − x T y | ≤ γ n | x | T | y | , 这里右侧保留了乘积项的绝对值,因而能显示抵消使相对误差变大的情形。
直觉
标准模型像一套记账法:每次正规运算都在精确结果旁贴上一个不超过 u 的局部相对扰动标签,随后用 θ k 和 γ k 把一串标签合并。它让算法页能集中分析数据流和误差传播,而不必反复展开每个位的舍入过程;遇到下溢边界时,再把绝对项 η 纳入账本。
这套黑箱只有在边界条件清楚时才可靠。溢出会直接离开有限相对误差结论,表达式重排与编译器 contraction 则改变“发生了几次、在哪里舍入”;分析必须跟随实际运算路径,而不能把不同 IEEE 754 行为塞进同一个 δ 。
例子与边界
正规输出本身不足以保证纯相对模型。在 binary64 中,令最小正规数 m = 2 − 1022 、u = 2 − 53 。两个操作数 m 与 1 − u 都能精确表示,但精确乘积
z = m ( 1 − u ) = m − 2 − 1075 恰好位于最大次正规数与 m 的中点。ties-to-even 把它舍入为正规数 m ,相对于精确值的误差却为
m − z z = u 1 − u > u . 此处应使用带绝对项的混合模型;选 δ = 0 、η = 2 − 1075 = α / 2 就能精确解释该结果。边界检查针对精确结果的大小,而不是只看运算结束后的指数位。
当 n ≥ 1 时,朴素点积经历 n 次乘法与 n − 1 次加法;n = 0 的空点积直接返回 0 ,不做算术运算。界中却出现 γ n :展开递推后,每个原始乘积只乘上自身的乘法舍入因子,以及进入部分和之后经历的加法因子,最长传播路径至多含 n 个因子。总操作数与一项误差经过的路径长度不是同一种计数。局部误差即使都很小,若正负项几乎抵消,精确点积 x T y 可能远小于 | x | T | y | ,于是绝对误差受控却没有小的相对误差。界中的 | x | T | y | 已经明确暴露了这项问题尺度,模型仍在其适用域内正常工作。
融合乘加 FMA 对 a b + c 只在最终结果舍入一次,可写成
fl fma ( a b + c ) = ( a b + c ) ( 1 + δ ) . 若分开执行乘法和加法,则乘积先舍入,随后求和再舍入,两条误差路径不同。取 binary64 中可精确表示的
a = 1 + 2 − 27 , b = 1 − 2 − 27 , c = − 1. 精确值 a b + c = − 2 − 54 。分开计算时,精确乘积 1 − 2 − 54 位于相邻浮点数的中点,ties-to-even 把它舍入为 1 ,随后加 − 1 得 0 ;FMA 只在最终舍入,返回可表示的 − 2 − 54 。编译器是否允许 contraction 因而会改变位级结果和证明所对应的运算图。
当 k u ≥ 1 时,γ k 的分母不再为正,不能继续引用这条简洁界。实际算法未必立刻失效,但需要更合适的分析、提高精度或重组计算。把 θ k 当作独立同分布噪声再用方差相消,同样超出了确定性模型能保证的范围。
推论与应用
浮点求和 公理库 浮点求和:顺序、成对与补偿 Floating-point summation · Compensated summation 比较顺序、成对和补偿求和的误差传播,并区分准确性、可复现性与并行代价。 用该模型比较顺序、成对和补偿算法;后续 LU、QR 与迭代精化则用它解释局部运算怎样转化为后向误差。共同模型使不同算法的稳定性陈述可以比较,但每页仍需写明运算路径、范数和不排除的异常情形。
模型也为数值稳定性 公理库 数值稳定性 Numerical stability 以允许的小输入扰动刻画算法的有限精度行为,并与问题条件性及其他稳定性概念分开。 提供执行层接口:若全部局部舍入能等价为原始输入上的小扰动,算法可获得后向稳定结论;若误差在中间量上被巨大放大,仅知道每步 | δ | ≤ u 仍不足以保证最终答案可信。对次正规数、异常值或改变舍入次数的实现,必须先换模型,再谈稳定性标签。
参考资料
Nicholas J. Higham, Accuracy and Stability of Numerical Algorithms , 2nd ed., SIAM, 2002, Chs. 2–3.
David Goldberg, “What Every Computer Scientist Should Know About Floating-Point Arithmetic,” ACM Computing Surveys 23(1), 1991,作者论文的授权重印 ,Relative Error and Ulps、Denormalized Numbers 两节。
IEEE, IEEE Standard for Floating-Point Arithmetic , IEEE Std 754-2019.