2012-06-23 28 views
7

我想弄清楚Java 7 x64中與BigIntegers相關的以下問題。我試圖計算出一個數字,以極高的力量。代碼如下,然後是問題描述。打印非常大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^15544是觸發問題的最小計算; 2^15543工作正常。

我不是在哪裏接近主機系統的內存限制,我不相信我甚至接近VM限制(無論如何,運行VM參數-Xmx1024M-Xms1024M都沒有影響)。

在互聯網戳尋找答案我已經開始懷疑,我打在任何BigIntegerString涉及到一個數組(Integer.MAX_VALUE),這些類型的使用內部數據存儲的最大尺寸的限制後。如果問題出在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