95

可能重复:
BigInteger 没有限制是什么意思?

JavadocBigInteger没有定义任何最大值或最小值。但是,它确实说:

(重点补充)

不可变的任意精度整数

即使在理论上也有这样的最大值吗?还是BigInteger操作方式根本不同,以至于实际上除了计算机上可用的内存量之外没有最大值?

4

3 回答 3

94

该数字保存在int[]一个数组的最大大小为Integer.MAX_VALUE. 所以最大的 BigInteger 可能是(2 ^ 32) ^ Integer.MAX_VALUE.

诚然,这取决于实现,而不是规范的一部分。


在 Java 8 中,BigInteger javadoc添加了一些信息,给出了支持的最小范围和当前实现的实际限制:

BigInteger必须支持-2Integer.MAX_VALUE(exclusive) 到+2Integer.MAX_VALUE(exclusive) 范围内的值,并且可能支持该范围之外的值。

实现说明:BigInteger构造函数和操作在结果超出(exclusive) 到(exclusive)ArithmeticException的支持范围时抛出。-2Integer.MAX_VALUE+2Integer.MAX_VALUE

于 2012-10-02T15:24:20.977 回答
21

只有当您知道它不是小数并且长数据类型可能不够大时,才会使用 BigInteger。BigInteger 的最大大小没有上限(与计算机上的 RAM 可以容纳的一样大)。

这里

它是使用一个实现的int[]

  110       /**
  111        * The magnitude of this BigInteger, in <i>big-endian</i> order: the
  112        * zeroth element of this array is the most-significant int of the
  113        * magnitude.  The magnitude must be "minimal" in that the most-significant
  114        * int ({@code mag[0]}) must be non-zero.  This is necessary to
  115        * ensure that there is exactly one representation for each BigInteger
  116        * value.  Note that this implies that the BigInteger zero has a
  117        * zero-length mag array.
  118        */
  119       final int[] mag;

源头

来自维基百科文章任意精度算术

几种现代编程语言内置了对 bignums 的支持,而其他语言则具有可用于任意精度整数和浮点数学的库。这些实现通常使用可变长度的数字数组,而不是将值存储为与处理器寄存器大小相关的固定数量的二进制位。

于 2012-10-02T15:28:50.430 回答
14

您要达到的第一个最大值是字符串的长度,即 2 31 -1 位。它比 BigInteger 的最大值小得多,但恕我直言,如果不能打印,它就会失去很多价值。

于 2012-10-02T15:25:08.313 回答