Java 7 x64のBigIntegerに関連する次の問題を理解しようとしています。私は非常に高いパワーに数値を計算しようとしています。コードは以下の通りで、問題の説明が続きます。非常に大きなBigIntegerをプリントする
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
またはこれらのタイプは、内部データ保存のために使用することを配列(Integer.MAX_VALUE
)の最大サイズに関係String
のいずれかでの制限に達していますことを疑うようになってきている答えを探して、インターネットの周り突っついた後。問題がString
にある場合は、BigInteger
を拡張し、BigInteger
が印刷されるまで、一度に数文字を吐き出す印刷方法を書くことは可能だと思うが、問題は他の場所にあると思われる。
私の質問を読んでいただきありがとうございます。
ええと、このコードはうまく動作し、ここでもうまく動作します:http://ideone.com/EA0yl。 –
私は問題があなたの端末かもしれないと思う。代わりにファイルに印刷してみてください。 –
ランタイムをデバッグできます。 jdkを使用してください - ソースは –