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