Печать очень больших больших целых чисел

Я пытаюсь выяснить следующую проблему, связанную с BigIntegers в Java 7 x64. Я пытаюсь вычислить число в чрезвычайно высокой степени. Ниже приведен код, за которым следует описание проблемы.

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работает нормально.

Я даже близко не достиг предела памяти в хост-системах, и я не верю, что я даже близок к пределу ВМ (во всяком случае, при работе с аргументами ВМ -Xmx1024M-Xms1024Mне действует).

Покопавшись в Интернете в поисках ответов, я пришел к выводу, что достиг предела либо в BigInteger, либо в String, связанном с максимальным размером массива ( Integer.MAX_VALUE), которые эти типы используют для внутреннего хранения данных. Если проблема в String, я думаю, можно было бы расширить BigIntegerи написать метод печати, который выдает несколько символов за раз, пока не будет получен весь BigInteger. ] печатается, но я подозреваю, что проблема в другом.

Спасибо, что нашли время прочитать мой вопрос.

7
задан Jon Skeet 23 June 2012 в 23:09
поделиться