bigints.pas vs GMP 6.3.0 (64-bit limbs)
sanity check ok (1000x900-bit product matches)
(ratio = BigInts / GMP; >1 slower, <1 faster)
+---------------------------------+----------------------------------+----------------------------------+----------+------------+
| operation | BigInts | GMP | ratio | RAM used |
+---------------------------------+----------------------------------+----------------------------------+----------+------------+
| add (128 digits) | 0,015 us / 0,000 s | 0,007 us / 0,000 s | 2,3x | 4 KB |
| add (1024 digits) | 0,050 us / 0,000 s | 0,016 us / 0,000 s | 3,1x | 5 KB |
| add (16384 digits) | 0,279 us / 0,000 s | 0,200 us / 0,000 s | 1,4x | 17 KB |
| add (262144 digits) | 4,215 us / 0,000 s | 3,913 us / 0,000 s | 1,1x | 219 KB |
| add (1M digits) | 15,426 us / 0,000 s | 14,839 us / 0,000 s | 1,0x | 819 KB |
| add (10M digits) | 533,056 us / 0,001 s | 171,426 us / 0,000 s | 3,1x | 8,0 MB |
| add (100M digits) | 9842,063 us / 0,010 s | 10211,813 us / 0,010 s | 1,0x | 79,3 MB |
| add (1B digits) | 85180,750 us / 0,085 s | 69546,450 us / 0,070 s | 1,2x | 792,1 MB |
| addTo (128 digits) | 0,017 us / 0,000 s | 0,006 us / 0,000 s | 2,7x | 4 KB |
| addTo (1024 digits) | 0,024 us / 0,000 s | 0,017 us / 0,000 s | 1,4x | 5 KB |
| addTo (16384 digits) | 0,215 us / 0,000 s | 0,199 us / 0,000 s | 1,1x | 24 KB |
| addTo (262144 digits) | 3,856 us / 0,000 s | 4,061 us / 0,000 s | 0,9x | 326 KB |
| addTo (1M digits) | 15,467 us / 0,000 s | 15,163 us / 0,000 s | 1,0x | 1,2 MB |
| addTo (10M digits) | 166,164 us / 0,000 s | 164,965 us / 0,000 s | 1,0x | 12,0 MB |
| addTo (100M digits) | 6568,044 us / 0,007 s | 6521,960 us / 0,007 s | 1,0x | 118,9 MB |
| addTo (1B digits) | 67112,800 us / 0,067 s | 66997,700 us / 0,067 s | 1,0x | 1,16 GB |
| sub (128 digits) | 0,016 us / 0,000 s | 0,007 us / 0,000 s | 2,3x | 4 KB |
| sub (1024 digits) | 0,047 us / 0,000 s | 0,018 us / 0,000 s | 2,7x | 5 KB |
| sub (16384 digits) | 0,267 us / 0,000 s | 0,209 us / 0,000 s | 1,3x | 17 KB |
| sub (262144 digits) | 4,141 us / 0,000 s | 4,323 us / 0,000 s | 1,0x | 219 KB |
| sub (1M digits) | 16,288 us / 0,000 s | 15,810 us / 0,000 s | 1,0x | 819 KB |
| sub (10M digits) | 557,030 us / 0,001 s | 165,526 us / 0,000 s | 3,4x | 8,0 MB |
| sub (100M digits) | 8368,406 us / 0,008 s | 6694,805 us / 0,007 s | 1,2x | 79,3 MB |
| sub (1B digits) | 98272,200 us / 0,098 s | 68090,700 us / 0,068 s | 1,4x | 792,1 MB |
| subTo (128 digits) | 0,017 us / 0,000 s | 0,007 us / 0,000 s | 2,4x | 4 KB |
| subTo (1024 digits) | 0,024 us / 0,000 s | 0,018 us / 0,000 s | 1,4x | 5 KB |
| subTo (16384 digits) | 0,215 us / 0,000 s | 0,200 us / 0,000 s | 1,1x | 24 KB |
| subTo (262144 digits) | 4,081 us / 0,000 s | 4,024 us / 0,000 s | 1,0x | 326 KB |
| subTo (1M digits) | 15,034 us / 0,000 s | 15,197 us / 0,000 s | 1,0x | 1,2 MB |
| subTo (10M digits) | 165,555 us / 0,000 s | 166,590 us / 0,000 s | 1,0x | 12,0 MB |
| subTo (100M digits) | 6186,084 us / 0,006 s | 6729,475 us / 0,007 s | 0,9x | 118,9 MB |
| subTo (1B digits) | 80674,000 us / 0,081 s | 72769,300 us / 0,073 s | 1,1x | 1,16 GB |
| mul (128 digits) | 0,089 us / 0,000 s | 0,030 us / 0,000 s | 2,9x | 4 KB |
| mul (1024 digits) | 1,263 us / 0,000 s | 1,164 us / 0,000 s | 1,1x | 5 KB |
| mul (16384 digits) | 119,905 us / 0,000 s | 61,170 us / 0,000 s | 2,0x | 17 KB |
| mul (262144 digits) | 7855,817 us / 0,008 s | 2396,390 us / 0,002 s | 3,3x | 219 KB |
| mul (1M digits) | 41104,567 us / 0,041 s | 11367,609 us / 0,011 s | 3,6x | 13,5 MB |
| mul (10M digits) | 521079,800 us / 0,521 s | 141278,000 us / 0,141 s | 3,7x | 104,8 MB |
| mul (100M digits) | 10515484,500 us / 10,515 s | 1894277,400 us / 1,894 s | 5,6x | 79,3 MB |
| mul (100Kx1K digits) | 93,822 us / 0,000 s | 105,157 us / 0,000 s | 0,9x | 46 KB |
| div (128 / 64 digits) | 0,068 us / 0,000 s | 0,265 us / 0,000 s | 0,3x | 4 KB |
| div (1024 / 512 digits) | 0,711 us / 0,000 s | 0,471 us / 0,000 s | 1,5x | 4 KB |
| div (16384 / 8192 digits) | 75,629 us / 0,000 s | 44,093 us / 0,000 s | 1,7x | 14 KB |
| div (262144 / 131072 digits) | 6855,850 us / 0,007 s | 2203,369 us / 0,002 s | 3,1x | 165 KB |
| div (1M / 500K digits) | 51192,933 us / 0,051 s | 11145,542 us / 0,011 s | 4,6x | 615 KB |
| div (10M / 5M digits) | 1125735,000 us / 1,126 s | 158257,000 us / 0,158 s | 7,1x | 30,8 MB |
| div (100M / 50M digits) | 25086734,700 us / 25,087 s | 2037606,300 us / 2,038 s | 12,3x | 59,4 MB |
| sqr (128 digits) | 0,082 us / 0,000 s | 0,022 us / 0,000 s | 3,7x | 4 KB |
| sqr (1024 digits) | 1,172 us / 0,000 s | 0,655 us / 0,000 s | 1,8x | 4 KB |
| sqr (16384 digits) | 104,774 us / 0,000 s | 44,058 us / 0,000 s | 2,4x | 10 KB |
| sqr (262144 digits) | 6825,437 us / 0,007 s | 1291,531 us / 0,001 s | 5,3x | 111 KB |
| sqr (1M digits) | 28274,360 us / 0,028 s | 6312,857 us / 0,006 s | 4,5x | 13,2 MB |
| sqr (10M digits) | 388331,100 us / 0,388 s | 95354,100 us / 0,095 s | 4,1x | 100,8 MB |
| divmod (128 / 64 digits) | 0,167 us / 0,000 s | 0,265 us / 0,000 s | 0,6x | 96,8 MB |
| divmod (1024 / 512 digits) | 0,844 us / 0,000 s | 0,710 us / 0,000 s | 1,2x | 96,8 MB |
| divmod (16384 / 8192 digits) | 77,129 us / 0,000 s | 55,883 us / 0,000 s | 1,4x | 96,8 MB |
| divmod (262144 / 131072 digits) | 6562,040 us / 0,007 s | 2476,149 us / 0,002 s | 2,7x | 96,9 MB |
| divmod (1M / 500K digits) | 49122,433 us / 0,049 s | 12676,745 us / 0,013 s | 3,9x | 97,4 MB |
| divmod (10M / 5M digits) | 1057814,500 us / 1,058 s | 192352,400 us / 0,192 s | 5,5x | 102,8 MB |
| divmod (100M / 50M digits) | 25286824,700 us / 25,287 s | 2473781,800 us / 2,474 s | 10,2x | 59,4 MB |
| toString (128 digits) | 0,706 us / 0,000 s | 0,246 us / 0,000 s | 2,9x | 4 KB |
| toString (1024 digits) | 6,937 us / 0,000 s | 3,248 us / 0,000 s | 2,1x | 7 KB |
| toString (16384 digits) | 297,653 us / 0,000 s | 169,630 us / 0,000 s | 1,8x | 43 KB |
| toString (262144 digits) | 19571,814 us / 0,020 s | 9570,486 us / 0,010 s | 2,0x | 632 KB |
| parse (128 digits) | 0,670 us / 0,000 s | 0,310 us / 0,000 s | 2,2x | 261 KB |
| parse (1024 digits) | 4,845 us / 0,000 s | 2,926 us / 0,000 s | 1,7x | 262 KB |
| parse (16384 digits) | 168,440 us / 0,000 s | 100,402 us / 0,000 s | 1,7x | 284 KB |
| parse (262144 digits) | 9829,407 us / 0,010 s | 4686,627 us / 0,005 s | 2,1x | 632 KB |
| modPow (128 digits) | 50,627 us / 0,000 s | 25,861 us / 0,000 s | 2,0x | 261 KB |
| modPow (1024 digits) | 10192,415 us / 0,010 s | 8817,519 us / 0,009 s | 1,2x | 262 KB |
| modPow (16384 digits, 4k-bit e) | 1675009,600 us / 1,675 s | 700189,900 us / 0,700 s | 2,4x | 275 KB |
| gcd (128 digits) | 3,083 us / 0,000 s | 1,006 us / 0,000 s | 3,1x | 261 KB |
| gcd (1024 digits) | 29,143 us / 0,000 s | 10,666 us / 0,000 s | 2,7x | 262 KB |
| gcd (16384 digits) | 1860,269 us / 0,002 s | 953,516 us / 0,001 s | 2,0x | 275 KB |
| gcd (262144 digits) | 183223,100 us / 0,183 s | 50438,567 us / 0,050 s | 3,6x | 476 KB |
| gcd (1M digits) | 1364238,700 us / 1,364 s | 298954,300 us / 0,299 s | 4,6x | 1,1 MB |
+---------------------------------+----------------------------------+----------------------------------+----------+------------+
(sink = 787874835)