#905·sonic

[discuss; enhancement] faster f32toa/f64toa algorithm

Author: xjb714Created Feb 6, 2026Updated Jul 8, 2026

字节跳动各位工程师:

您好!

讨论针对浮点数打印算法的优化,即对 f64toa.c 和 f32toa.c 进行优化说明。

项目信息

技术背景

最优浮点数打印算法遵循 Steele & White 算法。当前主流高性能算法包括 Ryu、Schubfach、Dragonbox、YY、ZMIJ 等。本算法基于 Schubfach 算法进行深度优化。

核心优化点

  1. 边界值判断优化:采用更高效的边界值判断算法,显著减少乘法运算次数
  2. 指令级并行优化:减少指令依赖,提升 IPC(每周期指令数)
  3. 指令数量优化:精简指令数量,降低指令缓存占用
  4. 分支预测优化:减少分支数量,优化分支预测逻辑,降低分支预测失败率
  5. SIMD 指令加速
    • ARM64:采用 NEON 指令集
    • x64:采用 AVX512IFMA、SSE4.1、SSE2 指令集

测试验证

  • f32 类型:已通过穷举测试
  • f64 类型:已通过随机数测试

当前状态

目前实现尚未完全符合 JSON 标准( https://tc39.es/ecma262/#sec-numeric-types-number-tostring )。后续计划优化代码以符合 JSON 标准,预计需要一定时间。

结语

欢迎各位工程师 review 代码,期待交流与合作!