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