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 321 ns · · ·
D38 426 ns 501 ns 551 ns ·
D57 601 ns 771 ns 791 ns ·
D76 741 ns 932 ns 957 ns ·
D115 2.07 µs 2.56 µs 2.72 µs ·
D153 3.09 µs 3.22 µs 4.21 µs 3.96 µs
D230 7.93 µs 7.37 µs 8.14 µs 9.93 µs
D307 11.3 µs 9.94 µs 11.3 µs 14.2 µs
D462 21.3 µs 18.8 µs 21.2 µs 27.7 µs
D616 36.2 µs 28.4 µs 31.3 µs 42.5 µs
D924 57.1 µs 45.5 µs 50.1 µs 67.4 µs
D1232 125 µs 84.7 µs 96.9 µs 127 µs

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

Peer Precision Median vs decimal-scaled
fastnum 154 101 ns 0.026× @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.

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 401 ns 1.21 µs 1.39 µs ·
D57 651 ns 792 ns 761 ns ·
D76 882 ns 842 ns 872 ns ·
D115 2.13 µs 2.33 µs 2.39 µs ·
D153 2.86 µs 2.9 µs 3.7 µs 4.08 µs
D230 7.09 µs 6.3 µs 6.5 µs 8.7 µs
D307 10.2 µs 8.97 µs 10.2 µs 12.5 µs
D462 20.5 µs 17.1 µs 19.8 µs 25.2 µs
D616 34.6 µs 26.7 µs 34.3 µs 44.1 µs
D924 60 µs 46.2 µs 53.6 µs 72.5 µs
D1232 112 µs 85.3 µs 102 µs 135 µs

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

Peer Precision Median vs decimal-scaled
fastnum 154 1.37 µs 0.34× @152
decimal-rs 38 269 ns 0.19× @37
g_math 38 3.42 µs 2.5× @37
rust_decimal 28 110 ns 0.091× @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 280 ns · · ·
D38 426 ns 541 ns 570 ns ·
D57 592 ns 716 ns 741 ns ·
D76 766 ns 887 ns 907 ns ·
D115 1.86 µs 2.17 µs 2.28 µs ·
D153 2.4 µs 2.8 µs 3.53 µs 4.46 µs
D230 5.71 µs 5.76 µs 6.33 µs 9.1 µs
D307 8.51 µs 8.24 µs 9.33 µs 13.1 µs
D462 15.6 µs 15.9 µs 16.8 µs 26.1 µs
D616 26.6 µs 23.5 µs 27.1 µs 38.5 µs
D924 41.7 µs 37.7 µs 47.3 µs 66 µs
D1232 77.6 µs 68.2 µs 85.4 µs 120 µs

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

Peer Precision Median vs decimal-scaled
fastnum 154 201 ns 0.045× @152
decimal-rs 38 98 ns 0.17× @37
g_math 38 806 ns 1.4× @37
rust_decimal 28 60 ns 0.11× @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.

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 331 ns · · ·
D38 346 ns 506 ns 556 ns ·
D57 481 ns 681 ns 711 ns ·
D76 681 ns 836 ns 856 ns ·
D115 2 µs 2.11 µs 2.28 µs ·
D153 2.66 µs 2.67 µs 3.62 µs 3.83 µs
D230 6.89 µs 6.1 µs 6.44 µs 8.19 µs
D307 11.7 µs 8.53 µs 9.86 µs 12.1 µs
D462 21.5 µs 17.2 µs 18.2 µs 24.4 µs
D616 33 µs 27.5 µs 31.4 µs 39.8 µs
D924 58.2 µs 43.7 µs 49.5 µs 70.4 µs
D1232 111 µs 86.6 µs 101 µs 129 µs

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

Peer Precision Median vs decimal-scaled
fastnum 154 275 ns 0.072× @152
decimal-rs 38 80 ns 0.14× @37
rust_decimal 28 123 ns 0.24× @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 340 ns · · ·
D38 381 ns 511 ns 566 ns ·
D57 546 ns 772 ns 776 ns ·
D76 761 ns 991 ns 1.01 µs ·
D115 1.68 µs 2.55 µs 2.74 µs ·
D153 3.11 µs 3.21 µs 4.28 µs 3.81 µs
D230 7.67 µs 7.42 µs 8.05 µs 9.99 µs
D307 11 µs 10.2 µs 11.3 µs 14.2 µs
D462 22.7 µs 18.8 µs 20.1 µs 28.8 µs
D616 36.1 µs 29.3 µs 31.6 µs 42 µs
D924 57.7 µs 43.6 µs 49 µs 68 µs
D1232 128 µs 84.5 µs 99.3 µs 128 µs

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

Peer Precision Median vs decimal-scaled
fastnum 154 115 ns 0.03× @152
decimal-rs 38 60 ns 0.11× @37
g_math 38 536 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.