浮点数与舍入误差
计算机浮点数用有限位有效数字和指数近似实数,类似科学记数法 。许多十进制小数没有有限二进制展开,例如 ,存储时只能取附近的可表示数。舍入误差是精确结果与存储或运算后数值的差;它与用有限差分近似导数时的截断误差是两回事。
一次“消失”的加法
在常见的 IEEE 754 binary64、默认就近舍入设置下, 超出该量级相邻浮点数的分辨能力,运算结果会舍入成 。于是按左到右算 得到 0,而精确实数结果为 1。改算 则得到 1。这不是代数结合律失效,而是每一步都要舍入,浮点运算不必满足实数加法的结合律。
相对误差模型的范围
对正常范围内、没有溢出或下溢且结果可按通常方式舍入的基本运算,常写 这里 是单位舍入误差;binary64 就近舍入时通常取 。它是分析模型,不保证最终计算始终有十六位正确数字:多次操作误差会传播,接近零的相减可能把输入中的相对误差显露出来。binary64 中常见的机器 epsilon 是 1 与下一个大于 1 的可表示数间距,和 的定义相差一倍。次正规数、除零、无穷、NaN 和溢出须另行处理,不能直接把上式当成所有情况的定理。
计算前先保留单位与尺度;比较两个近似结果时,不应把“显示成一样”当作数学相等。小差值尤其需检查前向误差与后向误差和条件数。例如在求方程根时,先把问题本身的敏感性与算法舍入区分开,才能选择真正有用的改写方式。