可能性のある複製:
制限のないBigIntegerの意味
BigInteger
のJavadocは、最大値または最小値を定義しません。しかし、それは言う:
(強調を追加)
不変任意精度整数
理論的にさえ、そのような最大値はありますか?または、BigInteger
の動作方法が根本的に異なり、実際にはコンピューターで使用可能なメモリ量を除いてno最大値がありますか?
番号はint[]
に保持されます-配列の最大サイズはInteger.MAX_VALUE
です。したがって、おそらくBigIntegerの最大値は(2 ^ 32) ^ Integer.MAX_VALUE
です。
確かに、これは実装に依存しており、仕様の一部ではありません。
Java 8では、いくつかの情報が BigInteger javadoc に追加され、サポートされる最小範囲と現在の実装の実際の制限が示されました。
BigInteger
は-2
の範囲の値をサポートする必要がありますInteger.MAX_VALUE
(排他的)+2
へInteger.MAX_VALUE
(排他的)、その範囲外の値をサポートする場合があります。実装に関するメモ:
BigInteger
コンストラクターと操作は、結果が-2
のサポートされている範囲外にあるときにArithmeticException
をスローしますInteger.MAX_VALUE
(排他的)+2
へInteger.MAX_VALUE
(排他的)。
BigIntegerは、小数ではないことがわかっており、longデータ型が十分に大きくない可能性がある場合にのみ使用されます。 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;
から ソース
ウィキペディアの記事から 任意精度の計算 :
いくつかの最新のプログラミング言語には、bignumの組み込みサポートがあり、他のプログラミング言語には、任意精度の整数および浮動小数点演算に使用できるライブラリがあります。これらの実装では、プロセッサレジスタのサイズに関連する固定数のバイナリビットとして値を保存するのではなく、通常、可変長の数字配列を使用します。
ヒットする最初の最大値は、2の文字列の長さです31-1桁。 BigIntegerの最大値よりはるかに小さいですが、印刷できない場合、IMHOはその値の多くを失います。