1. Math.sumPrecise 在数值累加精度提升的边界(替代 Kahan 求和)
Math.sumPrecise 如何提升数值累加精度?与 Kahan 求和相比边界是什么?
- 浮点累加的误差累积问题
- sumPrecise 的精确求和算法
- 与手写补偿算法的取舍
浮点累加(arr.reduce((a,b)=>a+b, 0))在大量小数值或正负交替的数组上会累积舍入误差:每次加法都按当前精度舍入,误差沿链放大。Math.sumPrecise(ES2025)是标准化的精确求和:内部采用改进的补偿算法(类 Kahan/Neumaier 思想),对数值数组做更精确的累加,返回结果显著优于朴素求和;它在规范层面保证比逐项相加更精确(不保证完全精确到最后一位,但误差大幅降低)。边界:sumPrecise 接收可迭代数值,混合 BigInt 会抛 TypeError(不允许混算);对性能敏感的超大数组,sumPrecise 的补偿计算比朴素 reduce 慢(常数倍);精度需求极高(金融、科学计算)时,可继续用 Decimal/BigInt 精确算术或显式 Kahan 实现(sumPrecise 是引擎实现,无法定制与调试);返回值仍是 Number(双精度),超过表示范围的场景仍需 BigInt。工程取舍:默认累加用 sumPrecise 获得更优精度与简洁 API,热点路径先基准测试。
本题考察精确求和的标准化方案。核心是"补偿求和思想 + 比朴素累加更精确 + 不改变双精度表示范围"的边界,与手写 Kahan 的对比是落点;能说明 BigInt 混算限制即展示细节。