[英]Printing very big BigIntegers
我試圖找出與Java 7 x64中的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^15544
是觸發問題的最小計算; 2^15543
工作正常。
我沒有接近達到主機系統的內存限制,我不相信我甚至接近VM限制(無論如何運行VM參數-Xmx1024M
-Xms1024M
都沒有效果)。
在互聯網上尋找答案之后,我開始懷疑我在BigInteger
或String
遇到限制,這些限制與這些類型用於內部數據存儲的數組的最大大小( Integer.MAX_VALUE
)有關。 如果問題出在String
我認為可以擴展BigInteger
並編寫一個打印方法,一次噴出幾個字符,直到整個BigInteger
被打印出來,但我寧願懷疑問題出在其他地方。
感謝您抽出寶貴時間閱讀我的問題。
問題是Eclipse中的Console視圖的錯誤。
在我的設置中,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
設置,該字符串將立即顯示:
Eclipse的bugzilla上相應的錯誤是:
根據這些,它是一個Windows / GTK錯誤,Eclipse的開發人員無法做任何事情。
該錯誤與文本的長度是像素有關,使用較小的字體,您可以在文本中斷之前獲得更多字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.