2013-07-04 21 views
2

我正在考慮使用BigInteger類來存儲10-1000 MB範圍內的數字。有人對此有經驗嗎?超大數字是否存在實際或隱含的限制?極大數字的BigInteger性能

+0

10 - 1000 MB?爲什麼你會使用'BigInteger'來創建一個適合'int'的數字?如果你想知道'BigInteger'是如何執行的,那麼寫一些簡單的測試來比較'int'和'long'是如何實現的。可能帶你... 10分鐘? –

+1

@JimMischel:1000000000會適合'int',但我認爲OP實際上意味着2^1000000000 – finnw

+2

256^1000000000 :) – mafu

回答

8

那麼,documentation for BigInteger說,只要你有足夠的內存來處理它,數字可以是任何大小。

BigInteger上的常規操作(加,減,乘等等)比常規數值類型慢得多(根據某些測試,至少爲50x),但您可以忍受這種情況。另外,你必須記住BigInteger類型是不可變的,所以對它的操作將產生一個新的實例。因此,添加兩個10MB號碼將創建一個新的10MB號碼。它不會修改現有的實例。這可能會影響您構建代碼的方式。

唯一的實際限制是計算機上可用的內存量以及程序可用的內存量。對於32位進程,這應該至少爲3GB,對於64位應該至少爲3GB,因此您應該可以使用所需的數字。

2

也有計算限制。我遇到了限制。

如果你乘以2個巨大的數字,計算它們花費的時間平方加上一些開銷。因此,如果您對數量乘以比您之前的計算大7倍的數字,則需要大約50倍的時間。如果你將它們放大1000倍,那麼它會花費大約100多萬次。

開始做循環,你會意識到程序可能永遠不會完成你的生活

+0

如果你的內存不足,如符文Grimstad指出,我知道有一種方法可以爲你的java程序分配更多的內存,但是你不得不查看它,因爲我不記得如何。 – koZmiZm

+0

是的,這是要考慮的事情。它主要用於劃分,我懷疑它的運行時行爲甚至比乘法還要糟糕。 – mafu