是否有一个巨大的整数库

Old*_*eon 4 java integer-overflow biginteger polynomial-math

我正在寻找一个Java库,可以处理真正庞大的数字或建议如何自己实现这个.我们正在谈论超越BigInteger.例如,2 ^ 39614081257132168796771974655 + 1怎么样.

显然,从理论上讲,我可以使用a TreeSet<BigInteger>,每位一个条目并完成所有数学老派,但我正在寻找能够使用内置数学硬件实际使用这些数字进行实际数学运算的东西.我不希望任何事情真的很快,但我非常想接近.

设置位的数量可能非常小 - 我代表G2多项式.

有谁知道那里有什么?

我怀疑包的功能必须是一个setBit(BigInteger i).

添加

感谢Apfloat的建议.可悲的是,以下是不可能的.它抱怨第二个参数必须是a long.

    Apint two = new Apint(2);
    Apint big = new Apint("39614081257132168796771974655");
    ApintMath.pow(two, big);
Run Code Online (Sandbox Code Playgroud)

请注意,我也愿意接受有关如何自己完成此操作的建议.

添加 - 尝试重新打开.

请参阅user2246674的帖子,提醒我们这些数字是多么惊人 - 我可以向你保证,我们不是在谈论一些普通的数学图书馆,我们正在谈论一些严肃Math.pow(age-of-the-universe,atoms-in_the_galaxy)的数字 - 我们当然不是在寻找纯粹的自以为是的答案.

use*_*674 8

这不是答案; 它就在这里,因为我认为重要的是要意识到这样一个数字是多么庞大,为什么标准的任意精度数学库无法工作.

该库必须支持直接处理高阶方程(例如为Wolfram | Alpha提供的方程).我认为这是一个很好的问题,特别是因为这个数量的数字必须特别对待.


一个标准位编码将无法在这里工作-如果这是可能的,然后将BigInteger的也很可能就足够了(如将其Apfloat提到).根本问题是2 ^ 39614081257132168796771974655是巨大的.就像,真的,非常大.只使用方程处理这个大小的数字才有意义!

让我们通过查看几个常见的最大整数值所需的存储量来判断标准的一个或两个补码编码需要多少:

  • 2 ^ 8需要8位; 或1个字节(8/8)
  • 2 ^ 32需要32位; 或4个字节(32/8)
  • 2 ^ 64需要64位; 或8个字节(64/8)

因此,如果使用类似的编码,则需要39614081257132168796771974655/8(或~5x10 ^ 27)字节的存储器.

一兆兆字节的内存只有1x10 ^ 12字节:它需要的不仅仅是QUADRILLION TERABYTES才能在这么大的数量上使用标准编码.