5

我正在考虑使用 BigInteger 类来存储 10-1000 MB 范围内的数字。有人对此有经验吗?对于非常大的数字是否存在实际或隐含的限制?

4

2 回答 2

12

好吧,BigInteger 的文档说只要你有足够的内存来处理它,数字可以是任意大小。

BigInteger 上的常规操作(加法、减法、乘法等)比常规数值类型慢得多(根据某些测试至少慢 50 倍),但您可能可以忍受。

此外,您必须记住 BigInteger 类型是不可变的,因此对其进行的操作将产生一个新实例。因此,添加两个 10MB 的数字将创建一个新的 10MB 数字。它不会修改现有实例。这可能会影响您如何构建代码。

唯一的实际限制是计算机上可用的内存量和程序可用的内存量。对于 32 位进程,这应该至少为 3GB,对于 64 位进程应该更多,因此您应该能够使用所需的数字。

于 2013-07-04T12:45:23.203 回答
4

还有计算限制。我遇到了限制。

如果将 2 个巨大的数字相乘,则计算它们所需的时间是平方的,再加上一些开销。因此,如果您对比先前计算大 7 倍的数字进行乘法运算,则需要大约 50 倍的时间。如果你把它们放大 1000 倍,那么它会花费大约 1000000+ 倍的时间。

开始循环,你会意识到这个程序可能永远不会在你的一生中完成

于 2013-07-06T15:52:53.970 回答