Double-double:不离开FPU实现31位精度

Double-double: 31 digits of precision without leaving the FPU

Double-double:不离开FPU实现31位精度

当 double 类型的 15 位精度在深度渲染 Mandelbrot 集合时捉襟见肘,而 MPFR 等任意精度库又因堆内存分配和循环开销导致性能暴跌 81 倍时,我找到了一个完美的中间方案:Double-double。通过将两个 double 值组合并视为一个整体,利用 Knuth 的 twoSum 和 FMA 指令实现无误差变换,我们能在不引入堆分配和外部依赖的情况下,获得约 31 位十进制精度。这种技巧将性能损耗控制在普通 double 的 9 倍左右,既填补了标准浮点与高精度库之间的巨大性能鸿沟,又让深究分形细节成为可能。

Double-double 值存储的是两个 double 的未求和结果。
  1. ncruces

    我有一个用 Go 实现的 double-double 运算库(还包含指数、对数、三角函数等):https://github.com/ncruces/dbldbl

    大部分时候没啥用,但写起来挺有意思。

  2. tobias2014

    AI 是重新发现了 https://www.davidhbailey.com/dhbsoftware/ 和类似的东西吗?还是有算法上的改进?如果不引用既有的 double-double 研究成果,很难判断。

  3. aappleby

    冷知识——Google Maps 在 WebGL 里也做了类似的处理,以便仅用 32 位浮点数就能在行星尺度的地图上保持坐标精度。

同日更多故事

2026-08-20