如何用java中的googol甚至更大的数字来计算?

时间:2014-09-20 08:01:45

标签: java math biginteger

这在理论上是否可行?即使BigIntegers失败,AFAIK也是如此,因为它们内部基于数组,而且这些数据的大小有限。是否有可能用Java中的指数形式的googolplexes直接计算?例如:((10^10^100)/2)-5

如何准备一个具有googol大小数字作为真实结果的应用程序?

(对于那些不知道的人:googol == 10^100googolplex == 10^10^100

3 个答案:

答案 0 :(得分:5)

我认为你应该尝试符号数学库。符号数学库对等式结构执行操作,不要试图在内部表示数字。

要开始的一些链接:

https://code.google.com/p/symja/

http://www4.ncsu.edu/~kaltofen/bibliography/99/BCK99.pdf

祝你好运。

答案 1 :(得分:1)

将其视为计算科学记数法计算的方式: 例如,2.574e100 * 4.762e15724可以计算为(2.574 * 4.762)e(100 * 15724),而不是分别计算2.574e100和4.762e15724,然后将它们相乘。

理论上可行,并且实施起来并不太困难。 Googol可以用两个整数表示,10和100,就像你在问题中所说的那样,#go; googol == 10 ^ 100"。

我上面所说的更简单的解释是: 您不会将googol写为100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,您可以将其写为10 ^ 100。让计算机也这样做。

答案 2 :(得分:-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"));

但是存储数字,而不是数字的符号,但数字的二进制表示对于数字足够大是不可能的。