BigInteger/BigDecimal tem tamanho infinito? Arredonda números altos?

Pessoal, se eu fizer a conta em BigDecimal (exemplo):
999 quinquilhões * 998 quinquilhões * 700 quinquilões, vai dar o número real (sem arredondamento e do tamanho que deve ser) ou vai dar arredondado?

Outra pergunta
Se eu pedir para o BigDecimal calcular o PI (355/113), qual é o máximo de caracteres que ele calcula? (desculpe por não testar, estou num PC bem velho, com 256MB de RAM :D)

Vlw galera

Bom, pegue o teste então, bem auto-explicativo: :wink:

    public static void main(String[] args) {

        String num1 = "999000000000000000000000000";
        String num2 = "999000000000000000000000000";
        String num3 = "999000000000000000000000000";
        String num4 = "999000000000000000000000000";

        BigInteger bi1 = new BigInteger(num1);
        BigInteger bi2 = new BigInteger(num2);
        BigInteger bi3 = new BigInteger(num3);
        BigInteger bi4 = new BigInteger(num4);

        BigInteger result1 = bi1.multiply(bi2).multiply(bi3).multiply(bi4);
        System.out.println(result1);

        String num5 = "355";
        String num6 = "113";
        BigDecimal bd1 = new BigDecimal(num5);
        BigDecimal bd2 = new BigDecimal(num6);
        BigDecimal result2 = bd1.divide(bd2);

        System.out.println(result2);
}

// console:
996005996001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
	at java.math.BigDecimal.divide(BigDecimal.java:1514)
	at Teste.main(Teste.java:79)

Se eu não me engano o tamanho do BigInteger não pode exceder um número com 2.147.483.648 de casas decimais.

BigDecimal vocês quis dizer?

O BigInteger guarda o seu valor num array de int, e como os vetores em Java não passando do valor Integer.MAX_VALUE, então podemos concluir que o maior número possível de ser guardado num BigInteger é um número com um pouco mais de 4 bilhões de casas.
E como o BigDecimal é uma representação que guarda a posição da casa decimal em um BigInteger(ou seja, ele tem um BigInteger pra guardar o seu valor), ele também vai guardar no máximo o tamanho de um vetor.

Se é até Integer.MAX_VALUE (na verdade um a mais pois Java é zero-indexed) então tem, no máximo 2.147.483.648 (pouco mais de 2 bilhões e 147 milhões de casas, como disse o ViniGodoy) e não mais de 4 bilhões.

De qualquer maneira, a aproximação que você propôs para pi ( 355/113 ) é uma dízima periódica com período 112.

3.1415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168
  1415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168
  1415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168...

[quote=entanglement]De qualquer maneira, a aproximação que você propôs para pi ( 355/113 ) é uma dízima periódica com período 112.

3.1415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168
  1415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168
  1415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168...

[/quote]

Nem se estressa com esse negócio do PI, não quero calcula ele não, foi só a primeira fração com resultado grande que me veio a cabeça para o exemplo :smiley:
Só uma dúvida, vc está querendo dizer que o valor

1415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168

vai ficar se repetindo sempre? Não sabia dessa, se for isso mesmo, calcular o PI é uma coisa fácil.

Mas, obrigado pessoal, solucionaram minhas dúvidas. Como sempre, a galera aqui do GUJ dando show na explicação!

Amigo, PI não é um número racional.

Não há como exprimi-lo como uma fração, e isso foi provado há algumas centenas de anos por Lambert

A aproximação 355/113 é uma aproximação, encontrada pelos chineses por volta do ano 480.

http://numbers.computation.free.fr/Constants/Pi/piApprox.html

E atualmente, a maior aproximação que se conseguiu fazer de PI foi realizada por Fabrice Bellard (com 2699999990000 dígitos, que leveram 131 dias para serem computados).