2014-09-20 79 views
1

理論上可行嗎?即使BigIntegers也應該失敗,AFAIK,因爲它們在內部基於陣列,並且這些尺寸有限。是否可以使用Java中的googolplexes的指數形式直接計算?例如:((10^10^100)/2)-5如何使用googol或java中的更大數字來計算?

如何準備一個應用程序,該應用程序將googol大小的數字視爲真正的結果?

(對於那些不知道是誰:一個googol == 10^100,一個googolplex == 10^10^100

+0

我認爲只有BigInteger的失敗時,你的記憶是永遠out.I一個encontered整數,將填補該BigInteger的int數組超出大小限制(這是2 * 4 = 8G) – BlackJoker 2014-09-20 08:22:34

+0

@ J.Rush根據[本數學答案](http://math.stackexchange.com/questions/42764/how-to-calculate-the-disk-space-required-to-store-googolplex)你需要大約'3.867e90千兆字節'來存儲googolplex,這不適合8G。 – Volune 2014-09-20 08:28:07

+1

@ J.Rush googolplex的方式太大了,無法適應任何當前計算機的內存。大約10^100位,而8GB只有大約10^10位。即使您用另一臺8GB計算機替換了計算機內存中的每一位,也不會代表googolplex。 – amalloy 2014-09-20 08:30:37

回答

1

把它想象成如何計算科學計數法: 例如2.574e100 * 4.762e15724可以計算爲(2.574 * 4.762)e(100 * 15724),而不是分別計算2.574e100和4.762e15724,然後將它們相乘。

所以理論上可行,而且不難實現。 Googol可以用兩個整數10和100來表示,就像您在說「一個googol == 10^100」時所做的那樣。

上面我說的更簡單的解釋是這樣的: 你不會把googol寫成1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,你會把它寫成10^100。讓電腦也一樣。

-1

爲什麼不使用BigInteger? 這個工程:

String googolString = "1"; 
for (int i = 0; i < 100; ++i) { 
    googolString += "0"; 
} 
BigInteger googol = new BigInteger(googolString); 

String googolPlexString = "1"; 
BigInteger googolPlex; 

for (int i = 0; i < googolString.length() - 1; ++i) { 
    for (int j = 0; j < 100; ++j) { 
     googolPlexString += "0"; 
    } 
} 

googolPlex = new BigInteger(googolPlexString); 

googolPlex = googolPlex.divide(new BigInteger("2")); 
googolPlex = googolPlex.subtract(new BigInteger("5")); 

但是,是的存儲數量,數量不限的象徵,而是一個數字的二進制表示將足夠大量是不可能的。

相關問題