Skip to content

多言語パフォーマンス分析

測定条件

これは moonbitlang/x/decimal@0.4.46Luna-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 には公開しません。