多言語パフォーマンス分析
測定条件
これは moonbitlang/x/decimal@0.4.46 と Luna-Flow/floating/decimal_gda@0.7.1 を比較する現在の MoonBit native release ベンチマークです。fixture の生成、解析、変換、正当性検証、整形は計測外です。exact_overlap は共通する数学的意味だけを測り、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×高速です。本 workload では定数倍の差を示しますが、計算量クラスの違いを示すものではありません。 - 除算:
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×まで差が広がります。符号・係数長・指数による早期判定が影響します。
他実装との位置付け
固定精度 decimal64/128 は範囲内で高速、任意精度の加減算は概ね O(n)、乗除算は BigInt のアルゴリズムと閾値に依存します。成熟した C 実装は limb 配置や SIMD/アセンブリの恩恵を受け、完全な IEEE/GDA コンテキストは丸め・状態フラグ・特殊値のコストを伴います。
結論と限界
この workload では、X は単純な高スループット算術、GDA は明示的な精度・丸め・コンテキスト意味論に適します。倍率は桁数に対して概ね一定で、異なる漸近計算量ではなく定数倍の実装差を示します。大きな BigInt では閾値の影響があり得ます。他の GDA 実装は同様のアルゴリズムなら近いオーバーヘッドですが、limb 配置、キャッシュ、ネイティブコード、固定精度、ハードウェアで定数は変わります。標準はアルゴリズムを規定しません。結果は fixture、target、ビルドモード、ホストに依存します。JSONL と artifacts/ を再確認してください。本ベンチマークは GitHub 専用で Mooncakes には公開しません。