Benchmarks

IEEE 754-2019 compliant decimal128 high-performance software solution created by Miguel.

Miguel has benchmarked his solution across the supported languages, measured against the IBM (decQuad), Intel (libbid), and Python (libmpdec) reference libraries and each language’s idiomatic decimal type. The detailed results are published per language — pick a language below for its realistic financial-mix (P-fin) headline followed by the per-operation band tables (add, subtract, multiply, divide, FMA), d128 vs the alternatives available to it, with explicit ratios.

Two cross-cutting views complement the per-language pages:

Methodology and the operation-category taxonomy are in the Benchmark Matrix.

Per-language results

Click on each language below to see the benchmark results and ratio by operation.
C

C Benchmark Results → — FinMix headline, then add / subtract / multiply / divide / FMA band tables (arm64 + x86_64), with ratios.

Ratio by Operation. Each row is the ratio for that reference library on x86_64 (Intel i9-9880H): ratio = libbid / Miguel, ratio = decQuad / Miguel, or ratio = mpdecimal / Miguel (> 1× ⇒ d128 faster).

  Add Subtract Multiply Divide
ratio = libbid / Miguel 6× 5× 1.7× – 18× 0.9× – 2.8×
ratio = decQuad / Miguel 8× 14× 2.0× – 21× 2.2× – 9×
ratio = mpdecimal / Miguel 7× 6× 1.2× – 12× 2.5× – 14×
C#

C# Benchmark Results → — FinMix headline, then add / subtract / multiply / divide / FMA band tables (arm64 + x86_64), with ratios.

Ratio by Operation. Each row is the ratio for that reference/idiom peer on x86_64 (Intel i9-9880H): ratio = System.Decimal / Miguel or ratio = Decimal128 (.NET 11) / Miguel (> 1× ⇒ d128 faster). System.Decimal has no wide-product multiply band, so that cell is blank.

  Add Subtract Multiply Divide
ratio = System.Decimal / Miguel 0.9× 0.7× — 0.6× – 5×
ratio = Decimal128 (.NET 11) / Miguel 2.2× 2.2× 2.4× – 5× 1.6× – 36×
Java

Java Benchmark Results → — FinMix headline, then add / subtract / multiply / divide / FMA band tables (arm64 + x86_64), with ratios.

Ratio by Operation. The ratio for Java’s idiom peer on x86_64 (Intel i9-9880H): ratio = BigDecimal / Miguel (> 1× ⇒ d128 faster).

  Add Subtract Multiply Divide
ratio = BigDecimal / Miguel 5× 4× 3× 2.0× – 54×
Kotlin KMP

Kotlin Benchmark Results → — FinMix headline, then add / subtract / multiply / divide / FMA band tables (arm64 + x86_64), with ratios.

Ratio by Operation. The ratio for Kotlin’s idiom peer on x86_64 (Intel i9-9880H): ratio = BigDecimal / Miguel (> 1× ⇒ d128 faster).

  Add Subtract Multiply Divide
ratio = BigDecimal / Miguel 4× 3× 3× 1.8× – 50×
Swift

Swift Benchmark Results → — FinMix headline, then add / subtract / multiply / divide / FMA band tables (arm64 + x86_64), with ratios.

Ratio by Operation. The ratio for Swift’s idiom peer on x86_64 (Intel i9-9880H): ratio = Foundation.Decimal / Miguel (> 1× ⇒ d128 faster).

  Add Subtract Multiply Divide
ratio = Foundation.Decimal / Miguel 107× 107× 25× – 181× 16× – 775×
Rust

Rust Benchmark Results → — FinMix headline, then add / subtract / multiply / divide / FMA band tables (arm64 + x86_64), with ratios.

Ratio by Operation. Each row is the ratio for that reference/idiom peer on x86_64 (Intel i9-9880H): ratio = rust_decimal / Miguel or ratio = libbid / Miguel (> 1× ⇒ d128 faster). rust_decimal has no wide-product multiply band (that falls back to libbid), and libbid isn’t used for add/subtract/divide, so those cells are blank.

  Add Subtract Multiply Divide
ratio = rust_decimal / Miguel 2.1× 1.9× — 0.6× – 5×
ratio = libbid / Miguel — — 2.0× – 13× —
Go

Go Benchmark Results → — FinMix headline, then add / subtract / multiply / divide / FMA band tables (arm64 + x86_64), with ratios.

Ratio by Operation. Go has no in-language decimal peer and takes no libbid fallback, so there is no alternative to compute a ratio against.

Python

Python Benchmark Results → — FinMix headline, then add / subtract / multiply / divide / FMA band tables (arm64 + x86_64), with ratios.

Ratio by Operation. The ratio for Python’s idiom peer on x86_64 (Intel i9-9880H): ratio = decimal.Decimal / Miguel (> 1× ⇒ d128 faster).

  Add Subtract Multiply Divide
ratio = decimal.Decimal / Miguel 3× 2.9× 1.9× – 3× 1.8× – 4×
Zig

Zig Benchmark Results → — FinMix headline, then add / subtract / multiply / divide / FMA band tables (arm64 + x86_64), with ratios.

Ratio by Operation. The ratio for Zig’s reference library on x86_64 (Intel i9-9880H): ratio = libbid / Miguel (> 1× ⇒ d128 faster). Zig has no in-language decimal peer.

  Add Subtract Multiply Divide
ratio = libbid / Miguel 4× 3× 2.1× – 8× 0.8× – 1.6×