是否有一个巨大的整数库

时间:2013-06-17 23:29:42

标签: java biginteger polynomial-math integer-overflow

我正在寻找一个可以处理真正庞大数字的Java库或者自己如何实现这个的建议。我们正在讨论BigInteger以外的问题。例如 2 ^ 39614081257132168796771974655 + 1

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

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

有没有人知道那里有什么?

我怀疑软件包的功能必须是setBit(BigInteger i)

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

    Apint two = new Apint(2);
    Apint big = new Apint("39614081257132168796771974655");
    ApintMath.pow(two, big);

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

已添加 - 尝试重新开启。

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

2 个答案:

答案 0 :(得分:8)

这不是答案;它就在这里,因为我认为重要的是要实现这个数字是多么疯狂以及为什么标准的任意精度数学库无法工作 -

必须支持直接处理高阶方程(例如幂Wolfram|Alpha)。我认为这是一个很好的问题,特别是因为这个数量的数字必须被视为特殊。


标准位编码不会在这里工作 - 如果这可能,那么BigInteger也可能就足够了(就像提到的Apfloat一样)。根本问题是2 ^ 39614081257132168796771974655 huge 。就像,真的,真的很大。只使用方程处理这个大小的数字才有意义!

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

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

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

一个TB的内存只有1x10 ^ 12个字节:它需要超过QUADRILLION TERABYTES才能在这个数量上使用标准编码

答案 1 :(得分:2)

您可以对此进行数学计算,但只能进行基于符号的计算,即您无法将其减少为实数,您只能处理此表达式。

您能举例说明您想要执行的操作吗?