1. Kahan summation 在累加 0.1 一百万次相对朴素累加的误差量级控制?
使用 Kahan 求和算法累加 0.1 一百万次,相比朴素累加,误差量级能控制在什么水平?
- Kahan 补偿求和(compensated summation)的原理与误差界
- 朴素累加与补偿累加的误差量级对比
- 0.1 在二进制浮点中的表示误差及其累积效应
朴素累加 0.1 一百万次,误差大致按 O(n·ε) 甚至 O(n²·ε) 增长,可能达到 1e-9 到 1e-10 量级甚至更差;而 Kahan 求和将误差降到 O(ε) 量级(与累加次数几乎无关),结果误差通常可控制在 1e-15 量级(接近 machine epsilon 的量级)。Kahan 求和通过维护一个"补偿变量" c,记录每次加法中被舍入掉的那部分残差,并在下一次加法前把它加回去,从而把逐次舍入误差重新吸收进后续运算,避免累积。对 0.1 这种不能精确表示的数,Kahan 求和能显著改善总和的精度。
0.1 转换为二进制浮点是无限循环小数,本身有表示误差。朴素累加每次加法都引入舍入误差,且误差随项数线性甚至平方增长;Kahan 算法把每次被舍入掉的部分保存下来并回补,使误差不随 n 增长,误差界从 O(nε) 降为 O(ε),这是数值稳定累加的核心思想。