理论上可行吗?即使BigIntegers
也应该失败,AFAIK,因为它们在内部基于阵列,并且这些尺寸有限。是否可以使用Java中的googolplexes的指数形式直接计算?例如:((10^10^100)/2)-5
如何使用googol或java中的更大数字来计算?
如何准备一个应用程序,该应用程序将googol大小的数字视为真正的结果?
(对于那些不知道是谁:一个googol == 10^100
,一个googolplex == 10^10^100
)
理论上可行吗?即使BigIntegers
也应该失败,AFAIK,因为它们在内部基于阵列,并且这些尺寸有限。是否可以使用Java中的googolplexes的指数形式直接计算?例如:((10^10^100)/2)-5
如何使用googol或java中的更大数字来计算?
如何准备一个应用程序,该应用程序将googol大小的数字视为真正的结果?
(对于那些不知道是谁:一个googol == 10^100
,一个googolplex == 10^10^100
)
我想你应该尝试象征性的数学库。符号数学库对等式结构执行操作,不要尝试在内部表示数字。
一些链接开始:
https://code.google.com/p/symja/
http://www4.ncsu.edu/~kaltofen/bibliography/99/BCK99.pdf
好运。
谢谢,就是我在找的东西! – 2014-09-20 09:19:10
把它想象成如何计算科学计数法: 例如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。让电脑也一样。
为什么不使用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"));
但是,是的存储数量,数量不限的象征,而是一个数字的二进制表示将足够大量是不可能的。
我认为只有BigInteger的失败时,你的记忆是永远out.I一个encontered整数,将填补该BigInteger的int数组超出大小限制(这是2 * 4 = 8G) – BlackJoker 2014-09-20 08:22:34
@ 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
@ J.Rush googolplex的方式太大了,无法适应任何当前计算机的内存。大约10^100位,而8GB只有大约10^10位。即使您用另一台8GB计算机替换了计算机内存中的每一位,也不会代表googolplex。 – amalloy 2014-09-20 08:30:37