2012-06-23 13 views
7

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が印刷されるまで、一度に数文字を吐き出す印刷方法を書くことは可能だと思うが、問題は他の場所にあると思われる。

私の質問を読んでいただきありがとうございます。

+0

ええと、このコードはうまく動作し、ここでもうまく動作します:http://ideone.com/EA0yl。 –

+0

私は問題があなたの端末かもしれないと思う。代わりにファイルに印刷してみてください。 –

+2

ランタイムをデバッグできます。 jdkを使用してください - ソースは –

答えて

11

問題は、Eclipseのコンソールビューのバグです。

私の設定では、Eclipse(HeliosとJuno)はCRLFなしで4095文字より長い行を表示することはできません。最大長は、フォントの選択に応じて異なります。以下を参照してください。

したがって、次のコードでも問題が示されます。BigIntegerは不要です。

StringBuilder str = new StringBuilder(); 
for (int i = 0; i < 4096; i++) { 
    str.append('?'); 
} 
System.out.println(str); 

つまり、文字列はコンソールに実際に印刷されます。たとえば、それをコピーすることができます。それは表示されていません。

回避策として

あなたはコンソールの環境設定でFixed width console設定を設定することができ、文字列がimmediatelly表示されます。

view of the pref

のEclipseのBugzilla上の対応するバグは以下のとおりです。

これらによれば、Windows/GTKのバグであり、Eclipseの開発者は何もできません。

バグがテキストの長さに関係しているが、画素で、小さい フォントを使用すると、あなたはそれ 休憩前のテキストに複数の文字を取得することができます。

+0

固定幅コンソールを有効にしても十分な結果が得られます。私はより良い問題分離をしたはずです。あなたの時間をありがとう。 – Techrocket9

関連する問題