Duvida sobre numeros

2 respostas
Rudy

Aloha pessoas blz?

Bom eu tenho um pequeno exercício de estátistica para fazer e para facilitar as coisas eu escrevi algumas linhas de java para me ajudar. Funcionou que foi uma maravilha, consegui economizar bastante tempo mas, foi ai que surgiu um pequeno problema que é quando faço os valores ao quadrado está retornando uns valores dos quais eu desconfio. Gostaria de saber se tem haver com os tipos que estou usando. Segue o código:
class Somatoria{
public static void main (String [] args){
	int ra = 200813364;
	int soma = 0;
	double somatoria;
	int [] vt = new int [50];			
	
	for(int i = 1;i <= 50;i++){
	vt[i-1] = (ra+i)*(ra+i);// aqui está retornando [telefone removido] na primeira volta do loop
 	                                //onde os valores são 200813365*200813365 que na caluladora
                                               //o resultado é 40326007562623225
	System.out.println(vt[i-1]);			
			
	}
	for(int x = 0;x<vt.length;x++){
	soma += vt[x];
	}
	somatoria = soma/50;
	somatoria = Math.pow(somatoria,2);// somatoria de x ao quadrado
	System.out.println(somatoria);
	
	}
}

Alguem pode me dizer por que a diferença entre os resultados.

Obrigado pessoas!

2 Respostas

T

Um int suporta números de -[telefone removido] até +[telefone removido]. Como o resultado esperado é 40326007562623225, que passa de um int, então ele dá esse resultado errado ( [telefone removido] ) em vez de 40326007562623225.

Se você tiver curiosidade por que é que deu [telefone removido], experimente converter 40326007562623225 para hexadecimal. Vai dar o número 8F444A4BFAD8F9. Se você pegar apenas os últimos 8 dígitos (32 bits, que é o que cabe em um int), vai dar o valor 4BFAD8F9. Convertendo esse valor para decimal de novo, vai dar [telefone removido], que é o tal número errado que deu nas suas contas.

Se quiser fazer contas com números MUITO grandes, use um BigDecimal ou BigInteger.

Como você está trabalhando com estatística, basta usar double, que é suficiente para 99,95% das coisas que você vai precisar fazer.

mgarcia

Tem a ver sim com o tipo de dados q vc está usando…
trocando pra long deve funcionar como vc quer

Long ra = new Long(200813364);  
			     Long soma = new Long(0);  
			     double somatoria;  
			     Long [] vt = new Long [50];             
			       
			     for(int i = 1;i <= 50;i++){  
			     vt[i-1] = (ra+i)*(ra+i);// aqui está retornando [telefone removido] na primeira volta do loop  
			                                     //onde os valores são 200813365*200813365 que na caluladora  
			                                                //o resultado é 40326007562623225  
			     System.out.println(vt[i-1]);              
			               
			     }  
			     for(int x = 0;x<vt.length;x++){  
			     soma += vt[x];  
			     }  
			     somatoria = soma/50;  
			     somatoria = Math.pow(somatoria,2);// somatoria de x ao quadrado  
			     System.out.println(somatoria);  
			       
			     }
Criado 30 de março de 2009
Ultima resposta 30 de mar. de 2009
Respostas 2
Participantes 3