floating_vs_decmial_x 设计与性能报告
1. 实验目标
本包当前比较 moonbitlang/x/decimal@0.4.46 与 Luna-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。