Skip to content

Comparisons — Arithmetic

Speed of decimal-scaled against the peer decimal crates on the arithmetic functions. See the Comparisons overview for the time units, the per-library precision model, and how to read the timings.

add

decimal-scaled — median time per call at each comparison scale (· = the tier cannot hold that precision):

Width @17 prec @28 prec @37 prec @152 prec
D18 330 ns · · ·
D38 395 ns 520 ns 561 ns ·
D57 616 ns 821 ns 836 ns ·
D76 772 ns 1 µs 1 µs ·
D115 2.14 µs 2.62 µs 2.82 µs ·
D153 3.8 µs 3.89 µs 4.22 µs 4.96 µs
D230 8.08 µs 8.21 µs 8.19 µs 10.4 µs
D307 13.3 µs 11.1 µs 12.2 µs 15.1 µs
D462 24.6 µs 19.5 µs 23.3 µs 31.1 µs
D616 41.6 µs 32.7 µs 34.7 µs 47.2 µs
D924 75.7 µs 58.4 µs 66.2 µs 90.5 µs
D1232 114 µs 89.8 µs 105 µs 148 µs

peers (fixed precision; each timed beside the matching decimal-scaled line):

Peer Precision Median vs decimal-scaled
fastnum 154 100 ns 0.02× @152
decimal-rs 38 60 ns 0.11× @37
g_math 38 526 ns 0.94× @37
rust_decimal 28 70 ns 0.13× @28
10 ns100 ns1 µs10 µs100 µs1 ms10 ms100 ms183857761151532303074626169241232significant-digit width (log)decimal-scaled @17 precdecimal-scaled @28 precdecimal-scaled @37 precdecimal-scaled @152 precfastnumdecimal-rsg_mathrust_decimal
decimal-scaled timed at each comparison scale its tier can hold (17, 28, 37, 152) across its widths — one line each, with a shaded min–max band; every fixed-precision peer is one diamond at its significant-digit capacity with a min–max whisker. Arithmetic is width-bound, so its scale-lines nearly overlap; transcendentals spread by precision.

div

decimal-scaled — median time per call at each comparison scale (· = the tier cannot hold that precision):

Width @17 prec @28 prec @37 prec @152 prec
D18 250 ns · · ·
D38 420 ns 1.28 µs 1.5 µs ·
D57 631 ns 816 ns 781 ns ·
D76 856 ns 911 ns 932 ns ·
D115 2.31 µs 2.31 µs 2.51 µs ·
D153 3.25 µs 3.31 µs 3.65 µs 4.77 µs
D230 7.25 µs 6.71 µs 6.85 µs 8.83 µs
D307 10.5 µs 9.61 µs 11.2 µs 13.9 µs
D462 23.4 µs 18.5 µs 19.9 µs 27.3 µs
D616 41.6 µs 31.8 µs 32.3 µs 44.9 µs
D924 67.7 µs 58.4 µs 64.1 µs 84.8 µs
D1232 116 µs 92.9 µs 103 µs 143 µs

peers (fixed precision; each timed beside the matching decimal-scaled line):

Peer Precision Median vs decimal-scaled
fastnum 154 1.43 µs 0.3× @152
decimal-rs 38 281 ns 0.19× @37
g_math 38 4.09 µs 2.7× @37
rust_decimal 28 120 ns 0.094× @28
10 ns100 ns1 µs10 µs100 µs1 ms10 ms183857761151532303074626169241232significant-digit width (log)decimal-scaled @17 precdecimal-scaled @28 precdecimal-scaled @37 precdecimal-scaled @152 precfastnumdecimal-rsg_mathrust_decimal
decimal-scaled timed at each comparison scale its tier can hold (17, 28, 37, 152) across its widths — one line each, with a shaded min–max band; every fixed-precision peer is one diamond at its significant-digit capacity with a min–max whisker. Arithmetic is width-bound, so its scale-lines nearly overlap; transcendentals spread by precision.

mul

decimal-scaled — median time per call at each comparison scale (· = the tier cannot hold that precision):

Width @17 prec @28 prec @37 prec @152 prec
D18 281 ns · · ·
D38 406 ns 541 ns 550 ns ·
D57 606 ns 721 ns 782 ns ·
D76 766 ns 912 ns 952 ns ·
D115 1.94 µs 2.19 µs 2.35 µs ·
D153 2.8 µs 3.1 µs 3.44 µs 5.19 µs
D230 5.67 µs 6.54 µs 6.67 µs 9.57 µs
D307 8.91 µs 8.78 µs 9.87 µs 14.2 µs
D462 16.7 µs 16.3 µs 18.9 µs 27.1 µs
D616 25 µs 24.7 µs 29.1 µs 41 µs
D924 52 µs 47.1 µs 53.9 µs 81.3 µs
D1232 79.4 µs 75.1 µs 90.1 µs 132 µs

peers (fixed precision; each timed beside the matching decimal-scaled line):

Peer Precision Median vs decimal-scaled
fastnum 154 200 ns 0.039× @152
decimal-rs 38 106 ns 0.19× @37
g_math 38 806 ns 1.5× @37
rust_decimal 28 60 ns 0.11× @28
10 ns100 ns1 µs10 µs100 µs1 ms10 ms183857761151532303074626169241232significant-digit width (log)decimal-scaled @17 precdecimal-scaled @28 precdecimal-scaled @37 precdecimal-scaled @152 precfastnumdecimal-rsg_mathrust_decimal
decimal-scaled timed at each comparison scale its tier can hold (17, 28, 37, 152) across its widths — one line each, with a shaded min–max band; every fixed-precision peer is one diamond at its significant-digit capacity with a min–max whisker. Arithmetic is width-bound, so its scale-lines nearly overlap; transcendentals spread by precision.

rem

decimal-scaled — median time per call at each comparison scale (· = the tier cannot hold that precision):

Width @17 prec @28 prec @37 prec @152 prec
D18 316 ns · · ·
D38 346 ns 491 ns 566 ns ·
D57 526 ns 701 ns 762 ns ·
D76 722 ns 886 ns 916 ns ·
D115 2.11 µs 2.17 µs 2.33 µs ·
D153 3.14 µs 3.13 µs 3.45 µs 4.52 µs
D230 7.22 µs 6.46 µs 6.68 µs 8.68 µs
D307 11.3 µs 9.45 µs 10.3 µs 12.9 µs
D462 24.6 µs 19.5 µs 20.6 µs 25.7 µs
D616 36.5 µs 29 µs 33.2 µs 44 µs
D924 72.5 µs 57.8 µs 61.8 µs 88.9 µs
D1232 104 µs 94 µs 110 µs 134 µs

peers (fixed precision; each timed beside the matching decimal-scaled line):

Peer Precision Median vs decimal-scaled
fastnum 154 261 ns 0.058× @152
decimal-rs 38 80 ns 0.14× @37
rust_decimal 28 121 ns 0.25× @28
10 ns100 ns1 µs10 µs100 µs1 ms10 ms100 ms183857761151532303074626169241232significant-digit width (log)decimal-scaled @17 precdecimal-scaled @28 precdecimal-scaled @37 precdecimal-scaled @152 precfastnumdecimal-rsrust_decimal
decimal-scaled timed at each comparison scale its tier can hold (17, 28, 37, 152) across its widths — one line each, with a shaded min–max band; every fixed-precision peer is one diamond at its significant-digit capacity with a min–max whisker. Arithmetic is width-bound, so its scale-lines nearly overlap; transcendentals spread by precision.

sub

decimal-scaled — median time per call at each comparison scale (· = the tier cannot hold that precision):

Width @17 prec @28 prec @37 prec @152 prec
D18 360 ns · · ·
D38 395 ns 501 ns 556 ns ·
D57 591 ns 801 ns 816 ns ·
D76 772 ns 1.01 µs 1.08 µs ·
D115 2.05 µs 2.62 µs 2.81 µs ·
D153 3.79 µs 3.89 µs 4.25 µs 4.52 µs
D230 8.53 µs 8.2 µs 8.26 µs 10.3 µs
D307 12.5 µs 10.9 µs 12.1 µs 15.8 µs
D462 26 µs 20.6 µs 22.9 µs 28.9 µs
D616 39.8 µs 29.8 µs 34.8 µs 47.2 µs
D924 71.8 µs 57.7 µs 66.1 µs 88.7 µs
D1232 121 µs 95.5 µs 104 µs 140 µs

peers (fixed precision; each timed beside the matching decimal-scaled line):

Peer Precision Median vs decimal-scaled
fastnum 154 110 ns 0.024× @152
decimal-rs 38 60 ns 0.11× @37
g_math 38 526 ns 0.95× @37
rust_decimal 28 70 ns 0.14× @28
10 ns100 ns1 µs10 µs100 µs1 ms10 ms100 ms183857761151532303074626169241232significant-digit width (log)decimal-scaled @17 precdecimal-scaled @28 precdecimal-scaled @37 precdecimal-scaled @152 precfastnumdecimal-rsg_mathrust_decimal
decimal-scaled timed at each comparison scale its tier can hold (17, 28, 37, 152) across its widths — one line each, with a shaded min–max band; every fixed-precision peer is one diamond at its significant-digit capacity with a min–max whisker. Arithmetic is width-bound, so its scale-lines nearly overlap; transcendentals spread by precision.