onde dqtdePecas é um double que está recebendo o valor de 2 elevado a 64… o valor é 18446744073709551616… se eu não tento formatar… ele me traz esse resultado: 1.8446744073709552E19 e se eu faço do jeito do código… ele faz o seguinte: 18.446.744.073.709.552.000
Reparem bem nas 4 ultimas casas… ele aproxima um valor inteiro…
como posso fazer aparecer esse valor na tela 18446744073709551616???
Então… nesse caso eu não preciso de decimais… preciso que ele imprima o valor de:
Eu tenho 64 “buracos”, no 1º buraco eu coloco uma semente, no buraco seguinte eu coloco o dobro de sementes do anterior… não sei se a lógica está certa, eu fiz assim:
longvalor=1;longmulti=1;for(inti=1;i<64;i++){if(i==1){continue;}multi=multi*2;valor+=multi;}System.out.println("Valor apresentado: "+BigInteger.valueOf(valor));// Valor apresentado: 9223372036854775807
realmente o double não armazena essa quantidade de bites, vocês podem me dar um idéia se tem como fazer e se eu estou fazendo da melhor forma com o BigInteger??
porque se for 65 buracos, o resultado é -1…
Valeu, abraço!!!
T
thingol
Você precisa usar o BigInteger para fazer as contas, já que um long só consegue armazenar até 2 ^63 - 1 = 9223372036854775807.
BigIntegervalor=BigInteger.ONE;BigIntegermulti=BigInteger.ONE;for(inti=1;i<64;i++){if(i==1){continue;}multi=multi.multiply(newBigInteger("2");valor=valor.add(multi);}System.out.println("Valor apresentado: "+BigInteger.valueOf(valor));// Valor apresentado: 9223372036854775807
panachi
Exatamente, não adianta usar long ou double para acumular os valores e depois usar um BigDecimal ou BigInteger para “formatar” o resultado. Você precisa usar um BigXXX no processo inteiro para não perder a precisão que você deseja.