簡體   English   中英

打印非常大的BigIntegers

[英]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都沒有效果)。

在互聯網上尋找答案之后,我開始懷疑我在BigIntegerString遇到限制,這些限制與這些類型用於內部數據存儲的數組的最大大小( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM