2014-09-20 28 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")); 

但是,是的存储数量,数量不限的象征,而是一个数字的二进制表示将足够大量是不可能的。

相关问题