Sehr große BigInteger drucken

Ich versuche, das folgende Problem im Zusammenhang mit BigIntegers in Java 7 x64 herauszufinden. Ich versuche, eine Zahl mit einer extrem hohen Leistung zu berechnen. Der Code ist unten angegeben, gefolgt von einer Beschreibung des Problems.

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());        
    }
}

Beim Drucken des Ergebnisses dieser Operation sind Probleme aufgetreten. Wenn dieser Code ausgeführt wird, wird die Nachricht gedruckt, jedoch nicht der Wert vonimages.toString().

Um das Problem einzugrenzen, begann ich mit der Berechnung von Zweierpotenzen anstelle der gewünschten Berechnung, die im Kommentar in dieser Zeile aufgeführt ist. Auf den beiden Systemen, auf denen ich das getestet habe,2^15544 ist die kleinste Berechnung, die das Problem auslöst;2^15543 funktioniert gut.

Ich bin nicht weit davon entfernt, das Speicherlimit auf den Hostsystemen zu erreichen, und ich glaube nicht, dass ich sogar nahe am VM-Limit bin (jedenfalls mit den VM-Argumenten-Xmx1024M -Xms1024M hat keine Auswirkung).

Nachdem ich mich im Internet umgesehen und nach Antworten gesucht habe, habe ich den Verdacht, dass ich in beiden Fällen an ein Limit stoßeBigInteger oderString in Bezug auf die maximale Größe eines Arrays (Integer.MAX_VALUE), die diese Typen für die interne Datenspeicherung verwenden. Wenn das Problem in istString Ich denke, es wäre möglich zu verlängernBigInteger und schreiben Sie eine Druckmethode, die bis zum Ende ein paar Zeichen auf einmal ausspucktBigInteger wird gedruckt, aber ich vermute eher, dass das Problem woanders liegt.

Vielen Dank, dass Sie sich die Zeit genommen haben, meine Frage zu lesen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage