Benchmark
Benchmarks in nanoseconds (10-9s) per operation comparing standard JDK BigDecimal (versions 1.1.8 and 1.3.0) with ArciMath BigDecimal on a Win98 AMD K6-2 350MHz, 16MB heap memory.
valueOf(int) | intValue() |
|---|
| Iteration count | 200000 | 20000000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 10700 | 541 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 7400 | 140 |
| java.math.BigDecimal (JDK 1.3.0-C) | 1050 | 233 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 800 | 272 |
valueOf(long) | longValue() |
|---|
| Iteration count | 200000 | 20000000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 10750 |
1167 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 8250 |
330 |
| java.math.BigDecimal (JDK 1.3.0-C) | 1050 |
467 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 1600 |
401 |
new BigDecimal(double) | doubleValue() |
|---|
| Iteration count | 10000 | 10000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 110000 |
208000 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 115000 |
231000 |
| java.math.BigDecimal (JDK 1.3.0-C) | 116000 |
159000 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 88000 |
55000 |
new BigDecimal(String) |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 500000 | 250000 | 166660 | 125000 | 90900 | 62500 | 45440 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 16140 | 20000 | 230709 | 342720 | 563806 | 1143360 | 5028389 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 14820 | 19080 | 224468 | 412160 | 912431 | 2394720 | 7482174 |
| java.math.BigDecimal (JDK 1.3.0-C) | 7800 | 12320 | 185167 | 403360 | 1032563 | 3055680 | 10164392 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 3400 | 5040 | 8940 | 14080 | 24202 | 43840 | 84727 |
toString |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 256000 | 128000 | 32000 | 32000 | 32000 | 32000 | 32000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 38828 | 70390 | 164687 | 274687 | 523437 | 1172500 | 3667812 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 51914 | 60078 | 178437 | 286562 | 526875 | 1103750 | 2510937 |
| java.math.BigDecimal (JDK 1.3.0-C) | 15429 | 21953 | 80625 | 147500 | 317500 | 785937 | 2248437 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 2578 | 4218 | 8437 | 13750 | 27500 | 49687 | 97812 |
add |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 320000 | 160000 | 40000 | 40000 | 40000 | 40000 | 40000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 17843 | 18937 | 75500 | 82500 | 89250 | 112500 | 330750 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 9437 | 9625 | 41250 | 43750 | 49500 | 59000 | 75500 |
| java.math.BigDecimal (JDK 1.3.0-C) | 2406 | 2062 | 16500 | 19250 | 22000 | 31500 | 46750 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 2593 | 3750 | 5500 | 8250 | 12500 | 20500 | 38250 |
subtract |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 320000 | 160000 | 40000 | 40000 | 40000 | 40000 | 40000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 29718 | 30562 | 93250 | 101500 | 110000 | 133250 | 369250 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 8750 | 9562 | 41250 | 43750 | 49500 | 59000 | 75500 |
| java.math.BigDecimal (JDK 1.3.0-C) | 2062 | 2062 | 16500 | 19250 | 23500 | 31500 | 46750 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 3250 | 3750 | 6750 | 11000 | 16500 | 27500 | 52000 |
multiply |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 256000 | 128000 | 32000 | 32000 | 32000 | 16000 | 6400 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 14375 | 15937 | 20625 | 32500 | 65312 | 171250 | 643750 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 7500 | 7656 | 13750 | 18750 | 44687 | 130625 | 446875 |
| java.math.BigDecimal (JDK 1.3.0-C) | 1523 | 2187 | 6875 | 17187 | 55000 | 185000 | 678125 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 2148 | 2968 | 10312 | 22187 | 58437 | 182500 | 626562 |
divide |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 80000 | 40000 | 10000 | 10000 | 10000 | 4800 | 2000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 47375 | 48250 | 181000 | 236000 | 352000 | 697916 | 1755000 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 32375 | 38500 | 198000 | 352000 | 797000 | 2220833 | 7360000 |
| java.math.BigDecimal (JDK 1.3.0-C) | 8250 | 11000 | 175000 | 390000 | 1028000 | 3135416 | 10685000 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 10875 | 11000 | 66000 | 160000 | 439000 | 1431250 | 5105000 |
compareTo |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 3200000 | 1600000 | 400000 | 400000 | 400000 | 400000 | 400000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 2609 | 2606 | 62750 | 64125 | 66725 | 76625 | 91875 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 2215 | 2193 | 35000 | 36525 | 40775 | 46700 | 57950 |
| java.math.BigDecimal (JDK 1.3.0-C) | 1081 | 893 | 15650 | 17150 | 19900 | 25800 | 36675 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 378 | 381 | 7825 | 10850 | 16750 | 28025 | 51075 |
equals |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 6400000 | 3200000 | 800000 | 800000 | 800000 | 800000 | 800000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 368 | 360 | 153 | 155 | 153 | 155 | 162 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 360 | 360 | 153 | 155 | 158 | 158 | 158 |
| java.math.BigDecimal (JDK 1.3.0-C) | 325 | 332 | 137 | 137 | 138 | 138 | 140 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 325 | 393 | 337 | 337 | 337 | 337 | 350 |
abs |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 6400000 | 9600000 | 6400000 | 12000000 | 22400000 | 42400000 | 84000000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 540 | 572 | 67 | 69 | 78 | 80 | 94 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 592 | 566 | 68 | 69 | 68 | 77 | 68 |
| java.math.BigDecimal (JDK 1.3.0-C) | 215 | 210 | 120 | 123 | 120 | 120 | 121 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 214 | 205 | 129 | 128 | 127 | 125 | 125 |
max |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 3200000 | 1600000 | 400000 | 400000 | 400000 | 400000 | 400000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 2625 | 2643 | 62900 | 64125 | 66875 | 76750 | 92000 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 2196 | 2193 | 34875 | 36400 | 40650 | 46550 | 57800 |
| java.math.BigDecimal (JDK 1.3.0-C) | 1134 | 956 | 15675 | 17175 | 20050 | 25800 | 36800 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 481 | 481 | 7950 | 10975 | 16900 | 28300 | 51075 |
setScale |
| Avg. Precision | 8 | 18 | 44 | 76 | 141 | 269 | 525 |
| Iteration count | 320000 | 160000 | 40000 | 40000 | 40000 | 40000 | 40000 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) | 48593 | 48750 | 156500 | 171750 | 214250 | 326750 | 531500 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) | 23843 | 24000 | 118250 | 169000 | 299250 | 675500 | 1947000 |
| java.math.BigDecimal (JDK 1.3.0-C) | 6343 | 6562 | 71500 | 133250 | 306000 | 844500 | 2695500 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) | 1531 | 1687 | 2750 | 2750 | 4250 | 5500 | 6750 |
number 'e' (microseconds) |
| Precision | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 |
| Iteration count |
256 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
| java.math.BigDecimal (JDK 1.1.8 with symcjit) |
3242187 |
5625000 |
10312500 |
24062500 |
65000000 |
220000000 |
852500000 |
4695000000 |
26140000000 |
| java.math.BigDecimal (JDK13 version running in JDK 1.1.8 with symcjit) |
2382812 |
4296875 |
9375000 |
27187500 |
96250000 |
405000000 |
2170000000 |
13345000000 |
89030000000 |
| java.math.BigDecimal (JDK 1.3.0-C) |
859375 |
1718750 |
5156250 |
18750000 |
85625000 |
460000000 |
2787500000 |
18265000000 |
126170000000 |
| be.arci.math.BigDecimal (JDK 1.3.0-C) |
429687 |
390625 |
1718750 |
3437500 |
10625000 |
48750000 |
262500000 |
1565000000 |
10550000000 |