Imprimindo BigIntegers muito grandes
Estou tentando descobrir o seguinte problema relacionado ao BigIntegers no Java 7 x64. Eu estou tentando calcular um número para um poder extremamente alto. Código está abaixo, seguido por uma descrição do problema.
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());
}
}
Estou encontrando problemas para imprimir o resultado dessa operação. Quando este código é executado, imprime a mensagem, mas não o valor deimages.toString()
.
Para isolar o problema, comecei a calcular os poderes de dois, em vez do cálculo desejado, listados no comentário dessa linha. Nos dois sistemas em que testei isso,2^15544
é o menor cálculo que desencadeia o problema;2^15543
funciona bem.
Não estou perto de atingir o limite de memória nos sistemas host e não acredito que esteja perto do limite da VM (de qualquer forma, executando com os argumentos da VM-Xmx1024M
-Xms1024M
não tem efeito).
Depois de bisbilhotar a internet procurando por respostas, cheguei a suspeitar que estou atingindo um limiteBigInteger
ouString
relacionado ao tamanho máximo de um array (Integer.MAX_VALUE
) que esses tipos usam para armazenamento interno de dados. Se o problema está emString
Eu acho que seria possível estenderBigInteger
e escrever um método de impressão que expulse alguns caracteres de cada vez até que todo oBigInteger
é impresso, mas eu suspeito que o problema esteja em outro lugar.
Obrigado por tomar o tempo para ler a minha pergunta.