diff_bench

diff_bench 收录 Luna-Flow MoonBit 包的差分正确性与性能基准。每个基准在相同输入上运行两个十进制库,用独立的 BigInt 预言机检验两者,并且只在结果正确时用 Mare Mark 测量它们。Luna-Flow 一侧的被测对象是 floating 的 decimal_gda 包。

本仓库是仅在 GitHub 上提供的参考项目。它没有发布到 mooncakes,也不打算作为运行时依赖。

包

包角色API教程设计
diff_bench(根)模板占位API教程设计
dzmingli_vs_floatingDzmingLi/decimal@0.2.2 对比 floating GDA,精确预言机,19 种运算API教程设计
dzmingli_vs_floating/bench规模扩展可执行程序,1 到 20,000 位API教程设计
dzmingli_vs_floating/bench_common常见位数可执行程序,1 到 28 位API教程设计
floating_vs_decmial_xmoonbitlang/x/decimal 对比 floating GDA,两个语义组API教程设计
floating_vs_decmial_x/bench规模扩展可执行程序,1 到 4,096 位API教程设计
floating_vs_decmial_x/bench_common常见位数可执行程序,1 到 28 位API教程设计

性能章节报告两项比较的测量结果(DzmingLi、X)。

阅读路径

初次来访。 阅读 dzmingli_vs_floating 教程:它用十几行代码把一次除法与预言机核对,然后复现已发布的运行。

解读结果。 先看性能页面,再看设计页面了解数字的含义:精度约定、配对统计以及 X 比较的语义组。

参与贡献。 阅读两份设计页,然后阅读贡献指南。新增运算在计时之前需要一条预言机规则、一个带证明的精度界和一个测试。

一段话概述方法

每个输入都由固定种子实例化为中立十进制数 (c,s)↦c⋅10−s(c, s) \mapsto c \cdot 10^{-s},在计时之外转换为各库的表示,并在一个可证明能容纳精确结果的精度下计算。结果被规范化后与预言机按精确相等进行比较。两个库的计时样本按数据集、重复和分块配对,并用中位数汇总。

制品与工具

原始 JSONL 记录、HTML 报告、Plot IR 以及 PNG、PDF 和 SVG 图都保存在手册之外的 artifacts/<package>/ 下。tools/ 目录包含 Python 图形布局(plot_dzmingli_benchmark.py、plot_dzmingli_supplementary_benchmark.py、layout_x_decimal.py,共用 mare_plot_ir.py)以及官方 decTest 审计(run_dzmingli_dectest_audit.sh)。

工具链

代码面向 MoonBit moonc 0.10 或更高版本,使用 moon.mod 与 moon.pkg 清单。库包可在所有目标上构建;可执行程序和异步的 Mare Mark 运行需要 native(异步运行器也可在 js 上工作)。已发布的测量是 native release 运行。

moon check --target all
moon test --target native

在 native 和 js 上有一个测试失败:division precision follows the requested semantic contract 期望 4097,这是在 wasm-gc 上记录的值,而 moonbitlang/core 中的 BigInt::from_string 在该目标上会错误解析长输入。正确值是 4099;参见 floating_vs_decmial_x 设计。