95

重複の可能性:
制限のないBigIntegerとはどういう意味ですか?

Javadoc forBigIntegerは、最大値または最小値を定義していません。しかし、それは言う:

(強調を追加)

不変の任意精度の整数

理論上でさえ、そのような最大値はありますか?または、コンピュータで使用可能なメモリの量を除いてBigInteger実際には最大値がないように、動作方法が根本的に異なりますか?

4

3 に答える 3

94

数は-に保持されますint[]-配列の最大サイズはですInteger.MAX_VALUE。したがって、BigIntegerの最大値はおそらくです(2 ^ 32) ^ Integer.MAX_VALUE

確かに、これは実装に依存し、仕様の一部ではありません。


Java 8では、BigInteger javadocにいくつかの情報が追加され、サポートされる最小範囲と現在の実装の実際の制限が示されています。

BigInteger-2Integer.MAX_VALUE(排他的)から(排他的)の範囲の値をサポートする必要があり+2Integer.MAX_VALUE、その範囲外の値をサポートする場合があります。

実装上の注意:結果が(排他的)から(排他的)のサポートされた範囲外になると、BigIntegerコンストラクターと操作がスローされます。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;

ソースから

ウィキペディアの記事から任意精度演算

いくつかの最新のプログラミング言語にはbignumのサポートが組み込まれており、その他の言語には任意精度の整数および浮動小数点演算に使用できるライブラリがあります。これらの実装では、プロセッサレジスタのサイズに関連する固定数のバイナリビットとして値を格納するのではなく、通常、可変長の桁配列を使用します。

于 2012-10-02T15:28:50.430 に答える
14

最初にヒットする最大値は、 231-1桁の文字列の長さです。BigIntegerの最大値よりもはるかに小さいですが、印刷できない場合、IMHOはその値の多くを失います。

于 2012-10-02T15:25:08.313 に答える