Я пытаюсь выяснить следующую проблему, связанную с BigIntegers в Java 7 x64. Я пытаюсь вычислить число до чрезвычайно высокой мощности. Код ниже, а затем описание проблемы.Печать очень больших 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
не имеет эффекта).
После ковыряться в Интернете в поисках ответов я пришел, чтобы подозревать, что я ударяя предел в любом BigInteger
или String
, связанные с максимальным размером массива (Integer.MAX_VALUE
), что эти типы используют для внутреннего хранения данных. Если проблема в String
, я думаю, что можно было бы продлить BigInteger
и написать метод печати, который выводит несколько символов за раз, пока не будет напечатано всего BigInteger
, но я скорее подозреваю, что проблема кроется в другом месте.
Спасибо, что нашли время, чтобы прочитать мой вопрос.
Хмм, этот код отлично подходит для меня, а также отлично работает здесь: http://ideone.com/EA0yl. –
Я думаю, что проблема может быть вашим терминалом. Попробуйте вместо этого напечатать его в файле. –
Вы можете отлаживать время выполнения. Используйте jdk - у него есть источник –