Skip to content

floating_vs_decmial_x 设计与性能报告

1. 实验目标

本包当前比较 moonbitlang/x/decimal@0.4.46Luna-Flow/floating/decimal_gda@0.7.1 在相同中立输入上的正确性和性能。fixture 构造、类型转换、校验和结果规范化均位于计时区间之外。

本报告只描述当前仓库和当前运行环境的结果,不代表所有硬件、编译器或十进制实现。

2. 语义分组

  • exact_overlap:数学结果可被两种 API 直接共同表示的操作。
  • x_compatible:乘法和除法遵循 X 的 28 位小数、向零截断策略;GDA 在计时路径中完成匹配的后处理。

两组结果不能混合解读;尤其不能把 GDA 的完整语义管线与单个 X 算术调用视为同一种成本。

3. 结果摘要

加法与减法

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×。两者总体接近线性增长,差异主要来自小对象路径、scale 对齐和大整数常数开销。

乘法

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×。这与 GDA 可以通过符号、系数长度和调整指数比较,而 X 需要将操作数对齐到共同 scale 的实现路径相符。

4. 与其他实现的关系

  • 固定精度 decimal64/decimal128 通常在其精度上限内更快,因为不需要无限增长的大整数。
  • 任意精度 BigInt 十进制库的加减通常接近 O(n);乘法和除法取决于底层大整数算法及阈值。
  • 成熟的 C 实现通常受益于 limb 运算、内存布局和编译器/汇编优化,不能直接用本基准数值外推。
  • IEEE/GDA 风格库通常为精度上下文、舍入模式、状态标志、NaN 和 Infinity 等通用能力支付额外成本。

5. 结论与边界

在本工作负载下,X 更适合简单且固定的高性能十进制运算;GDA 更适合需要完整 GDA/IEEE 语义的场景。该结论仅用于本仓库的实现参考和回归分析,不构成通用库选型结论。

6. 发布策略

floating_vs_decmial_x 是基准和参考包,保留在 GitHub 仓库中;本包不发布到 Mooncakes,不承诺作为下游项目的稳定依赖或运行时 API。