你没听说过的快速 dtoa 算法:yy 如何用一次乘法输出最短小数
来源:vitaut.net — 2026-08-10
📋 概述
作者介绍 yyjson 中一个几乎无人知晓却极快的浮点数转字符串(dtoa)算法 yy。它属于 Schubfach 家族,核心思路是找最短的十进制表示,使其能往返还原成原始二进制浮点。yy 的精妙之处在于全程用定宽整数算术,且只需一次乘以预计算的 10 的幂,而经典 Schubfach 需要两到三次。作者用 E4M3(8 位浮点)格式做了一个可视化逐步演示,并剖析了一个看起来像 Bug 的边界情形:由于 p10 表截断导致的工作字少了 1 个 LSB,靠一个奇偶校正项 eta 把判定拉回正确——这恰好展示了 round-half-to-even 与表截断在实际中的交互。
🔑 核心要点
- yy 属于 Schubfach 家族,求能往返还原的最短十进制表示。
- 它全程用定宽整数,只需一次乘以 10 的幂,而经典 Schubfach 要两三次。
- 通过 E4M3 可视化逐步演示四个候选值与三个判定式。
- 边界情形揭示 p10 表截断与 round-half-to-even 的交互如何被校正。
💡 金句
活在 JSON 库里的算法没有论文带来的引用数,但 yy 值得你认识它。
👍 0
👎 0
← 返回 Lobsters 首页