2012-11-22 49 views
4

我正在尋找一些方法來處理都在幾千萬的數字,可以在這個水平上做數學號碼。我可以使用Java和一些Python。因此,其中一個庫的圖書館會很方便,但是一個可以處理這些數字的程序也可以工作。有沒有人有什麼建議?程序或庫來處理龐大的數字

感謝

+2

BigInteger和BigDecimal有什麼問題尋找一個類庫可以使用這種數據類型來處理類型的jabs? –

+0

會玩'sys.maxint'幫助嗎? – inspectorG4dget

+0

認爲是matlab? –

回答

5

對於Java,看看內置類BigIntegerBigDecimalBigInteger號碼的可用內存大小受限制。 BigDecimal可以與多達2 位小數點的右側(在實際中,還通過可用內存的限制)表示任意大的基極 - 10個號碼。

上述這些問題都限制非常基本的數學運算。 (算術,整數冪等,沒有根,日誌等)如果你需要比這更多的東西,請查閱Java Numerics page of NIST的庫列表。 (該Apfloat package支持任意精度超越函數和複雜的數學。)

5

Python可以處理大數字,而無需任何庫。

>>> 100 ** 100 
1000000000000000000000000000000000000000000000000000000000000000000000000 
0000000000000000000000000000000000000000000000000000000000000000000000000 
0000000000000000000000000000000000000000000000000000000L 

雖然被別人的建議,你可能要使用gmpy如果你想要額外的速度。


在Java中,您可以使用BigInteger

+3

但這個數字是數以百萬計的數字長 – inspectorG4dget

+6

inspectorG4dget不10S:當然我也嘗試發佈數以千萬計的例子位第一,但隨後的StackOverflow說,帖子是太長了,所以我做了一個較短的例子,而不是。但我認爲你應該能夠明白這一點。請使用一點想象力。 –

+0

你有沒有試過類似'10 ** 10000000 + 1'的東西? – Junuxx

0

你需要什麼樣的數學運算的?

的Java已經提供了類,如java.math.BigDecimal中或java.math.BigInteger中,你可以用來做基本的東西(加法,乘法等)

2

對於Python,我建議gmpy,一個Python包裝器GNU Bignum library。雖然Python做理論上處理任意大的整數(只受內存限制),這是罰款幾千位左右的數字,這是不是真的很適合處理百萬位數的整數。它不使用最先進的算法進行快速乘法,數字轉換和其他標準操作。相反,gmpy被設計爲處理這種數量的數量。

下面是一些示例時序,示出了即使是幾千位gmpy比Python的內建多頭基本上更快:

$ python -m timeit -s "from gmpy import mpz" "str(mpz(10)**10000)" 
1000 loops, best of 3: 575 usec per loop 
$ python -m timeit "str(10**10000)" 
100 loops, best of 3: 11.8 msec per loop 

的一旁:在某些時候,的的Python核心開發者之一試圖替換Python的一個使用GMP的長整型實現。事實證明,它實際上減慢了Python的日常非巨大整數用例。有關詳細信息,請參見http://bugs.python.org/issue1814