Печать очень больших BigIntegers

Я пытаюсь выяснить следующую проблему, связанную с 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 печатается, но я скорее подозреваю, что проблема кроется в другом месте.

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

 Petr Janeček24 июн. 2012 г., 01:40
Это может быть воспроизведено даже на Eclipse Juno (Eclipse 4.2),I found no filed bug about it и нет слов об этом в документации. Собираюсь подать ошибку и обобщить все это в ответ.
 Thorbjørn Ravn Andersen24 июн. 2012 г., 01:09
Вы можете отлаживать среду выполнения. Используйте JDK - у него есть источник
 TeaCupApp24 июн. 2012 г., 01:20
работает на терминале на MacOSX lion
 Petr Janeček24 июн. 2012 г., 01:33
Кажется, что существует жесткое ограничение на длину строки без CRLF, в моем случае это 4096. Однако, когда я попытался установитьFixed width console в настройках консоли номер появился сразу.
 Oliver Charlesworth24 июн. 2012 г., 01:08
Хм, этот код работает нормально для меня, а также отлично работает здесь:ideone.com/EA0yl.

Ответы на вопрос(1)

Решение Вопроса

Проблема заключается в ошибке представления консоли в Eclipse.

В моей настройке Eclipse (Helios и Juno) не может показывать одну строку длиннее 4095 символов без CRLF. Максимальная длина может варьироваться в зависимости от вашего выбора шрифта - см. Ниже.

Таким образом, даже следующий код покажет проблему - нет необходимости вBigInteger.

StringBuilder str = new StringBuilder();
for (int i = 0; i < 4096; i++) {
    str.append('?');
}
System.out.println(str);

Тем не менее, строка на самом деле печатается в консоли - вы можете, например, скопировать ее из нее. Это просто не показано.

В качестве обходного пути вы можете установитьFixed width console установка в настройках консоли, сразу появится строка:

view of the pref

Соответствующие ошибки в Eclipse's bugzilla:

Display problem in console when a line reaches 4096 characters Texteditor can't show a line with more than 4095 chars. Limit at 4096 chars. Long lines are not displayed by editor

В соответствии с этим, это ошибка Windows / GTK, и разработчики Eclipse ничего не могут с этим поделать.

The bug is related to the length of the text is pixels, use a smaller font and you will be able to get more characters in the text before it breaks.

 Techrocket924 июн. 2012 г., 03:58
Конечно же, результат показывает с включенной консолью фиксированной ширины. Я должен был сделать лучшую проблему изоляции. Спасибо за ваше время.

Ваш ответ на вопрос