Skip to content

多语言性能分析报告

测量口径

本报告覆盖当前 MoonBit native release 基准,比较 moonbitlang/x/decimal@0.4.46Luna-Flow/floating/decimal_gda@0.7.1。fixture 构造、解析、类型转换、正确性校验和输出格式化均不计时。exact_overlap 只比较两套 API 的共同数学语义;x_compatible 额外计入 28 位小数精度和向零截断。

结果解读

  • 加减:1–256 位时 GDA 领先(0.23–0.39 µs/op,X 为 0.46–0.66 µs/op);1,024–4,096 位时 X 反超,末端约快 1.4–1.8×
  • 乘法:X 在所有规模领先约 2.1–2.7×;这是当前工作负载中的常数因子差异,不能据此断言复杂度类别不同。
  • 除法exact_overlap 下,1–64 位 GDA 快约 1.2–4.1×,256–4,096 位 X 快约 1.3–3.4×x_compatible 在 256 位以内相差约不超过 1.2×,到 1,024 和 4,096 位时 GDA 分别快约 1.8×3.8×
  • 比较:GDA 在所有规模领先,从 1 位约 3.4× 扩大到 4,096 位约 14.8×;符号、系数长度和指数的早期判定会减少 scale 对齐。

跨语言实现对照

固定精度 decimal64/128 在范围内通常最快;任意精度实现的加减接近 O(n),乘除取决于 BigInt 算法和阈值;成熟 C 实现可受益于 limb 布局和 SIMD/汇编;IEEE/GDA 完整上下文会为舍入、状态标志和特殊值支付额外开销。

结论与限制

该工作负载下,X 更适合简单高吞吐算术,GDA 更适合完整 GDA/IEEE 语义。decimal_gda 的优势是显式精度、舍入模式与上下文传播;当前倍率随位数没有稳定放大,因此支持常数级实现差异,不支持复杂度量级不同。更大位数仍可能受 BigInt 阈值影响。其他 GDA 实现若采用类似任意精度与上下文,通常有相近常数开销;更优 limb、缓存、本地代码或固定精度会改变常数。GDA 标准不规定算法,不能外推本报告倍率。结果只代表当前 fixture、target、编译模式和主机;请通过 JSONL 原始观测和 artifacts/ HTML 报告复核。该基准仅保留在 GitHub,不发布到 Mooncakes。