BigInteger有上限吗?

时间:2012-10-02 15:21:10

标签: java biginteger

  

可能重复:
  What does BigInteger having no limit mean?

BigInteger的Javadoc未定义任何最大值或最小值。但是,确实说:

(强调补充)

  

不可变任意精度整数

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

3 个答案:

答案 0 :(得分:64)

号码保存在int[]中 - 数组的最大大小为Integer.MAX_VALUE。因此,最大BigInteger可能是(2 ^ 32) ^ Integer.MAX_VALUE

不可否认,这是依赖于实现的,而不是规范的一部分。


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

  

BigInteger必须支持-2 Integer.MAX_VALUE (不包括)+2 Integer.MAX_VALUE (不包括)并且可以支持该范围之外的值。

     

实施说明:当BigInteger ArithmeticException (不包括)支持的范围之外,-2构造函数和操作抛出Integer.MAX_VALUE+2 Integer.MAX_VALUE (不包括)。

答案 1 :(得分:19)

  

只有当你知道它不是小数时才会使用BigInteger   长数据类型可能不够大。   BigInteger的最大尺寸没有上限(和上面的RAM一样大)   电脑可以举行。)

来自here

使用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;

来自the source

来自维基百科的文章Arbitrary-precision arithmetic

  

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

答案 2 :(得分:10)

你要击中的第一个最大值是一个字符串的长度,它是2 31 -1位数。它比BigInteger的最大值要小得多,但如果无法打印,它会失去很多价值。