Java7x64のBigIntegersに関連する次の問題を理解しようとしています。非常に高い累乗の数値を計算しようとしています。以下にコードを示し、その後に問題の説明を示します。
import java.math.BigInteger;
public class main {
public static void main(String[] args) {
// Demo calculation; Desired calculation: BigInteger("4096").pow(800*600)
BigInteger images = new BigInteger("2").pow(15544);
System.out.println(
"The number of possible 16 bpc color 800x600 images is: "
+ images.toString());
}
}
この操作の結果を印刷する際に問題が発生します。このコードを実行すると、メッセージは出力されますが、の値は出力されませんimages.toString()
。
問題を切り分けるために、その行のコメントにリストされている目的の計算ではなく、2の累乗の計算を開始しました。私がこれをテストした2つのシステムで2^15544
は、問題を引き起こす最小の計算です。2^15543
正常に動作します。
私はホストシステムのメモリ制限に近づくところがなく、VM制限にさえ近いとは思いません(いずれにしても、VM引数を使用して実行し-Xmx1024M
-Xms1024M
ても効果はありません)。
インターネットを調べて答えを探した後、これらのタイプが内部データストレージに使用する配列()の最大サイズのいずれかBigInteger
またはそれに関連する制限に達しているのではないかと思うようになりました。問題があれば、全体が印刷されるまで一度に数文字を吐き出す印刷メソッドを拡張して書くことは可能だと思いますが、問題は他の場所にあるのではないかと思います。String
Integer.MAX_VALUE
String
BigInteger
BigInteger
時間を割いて私の質問を読んでいただきありがとうございます。