Skip to content

JasonGiedymin/bigint

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 

Repository files navigation

Efficient BigInteger Implementation

This is an improved version of java.math.BigInteger that uses fast algorithms for multiplying and dividing large numbers. It is based on Alan Eliasen's BigInteger patch which provides the Karatsuba and Toom-Cook implementations.

Depending on the input size, numbers are multiplied using Long Multiplication, Karatsuba, Toom-Cook, or Schönhage-Strassen. For division, Long Division, Burnikel-Ziegler Division, or Barrett Division is used.

Benchmark results for multiplication of two n-digit numbers (Intel E2160 @1.8 GHz, 32-bit mode):

nOpenJDK 6 BigIntegerImproved BigIntegerSpeedup factorAlgorithm
100.00005ms0.00006ms.8Long
250.00018ms0.00018ms1.0Long
500.00047ms0.00046ms1.0Long
750.00067ms0.00069ms1.0Long
1000.00128ms0.00132ms1.0Long
2500.00635ms0.00647ms1.0Long
5000.02517ms0.02194ms1.1Kara
7500.05679ms0.04603ms1.2Toom
10000.10030ms0.07294ms1.4Toom
25000.62099ms0.29881ms2.1Toom
50002.48014ms0.80627ms3.1Toom
75005.61238ms1.53449ms3.7Toom
1000010.02289ms2.38305ms4.2Toom
2500062.33890ms9.44067ms6.6Toom
50000251.21408ms26.00191ms9.7Toom
75000563.95811ms46.20780ms12.2SS
1000001003.29212ms75.03685ms13.4Toom
2500006.28s.22s28.5SS
50000025.14s.50s50.3SS
75000056.82s1.08s52.6SS
1000000101.56s1.08s94.0SS
2500000645.63s2.57s251.2SS
50000002576.74s5.51s467.6SS
75000005807.67s13.55s428.6SS
100000008584.36s13.49s636.3SS

Benchmark results for division of a 2n-digit number by a n-digit number (Intel E2160 @1.8 GHz, 32-bit mode):

nOpenJDK 6 BigIntegerImproved BigIntegerSpeedup factorAlgorithm
100.0002ms0.0002ms1.0Long
250.0008ms0.0008ms1.0Long
500.0015ms0.0015ms1.0Long
750.0021ms0.0021ms1.0Long
1000.0032ms0.0032ms1.0Long
2500.0125ms0.0125ms1.0Long
5000.0426ms0.0426ms1.0Long
7500.0922ms0.0865ms1.07BZ
10000.1600ms0.1292ms1.24BZ
25000.9587ms0.5757ms1.67BZ
50003.7766ms1.7067ms2.21BZ
75008.4126ms3.1889ms2.64BZ
1000014.9409ms4.8979ms3.05BZ
2500092.7651ms19.8670ms4.67BZ
50000372.3610ms56.6618ms6.57BZ
75000836.4312ms102.0544ms8.20BZ
1000001.51s0.16s9.44BZ
2500009.29s0.62s14.98BZ
50000037.27s1.81s20.59BZ
75000084.29s3.25s25.94BZ
1000000150.46s4.68s32.15Barr
2500000950.75s13.38s71.06BZ
50000003797.64s30.31s125.29BZ
75000008546.75s53.71s159.12Barr
1000000015227.41s54.22s280.84Barr

About

An asymptotically fast version of java.math.BigInteger

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published