Pq a conta esta errada?

1 resposta
D
Alguem sa me explicar pq o códogo:
public class Simple1{
	public static void main(String arg[]){
		int a;
		double b, c;
		
		a=3;
		b=5.2;
		c=a+b;
		
		System.out.println("-------");
		
		System.out.println("a= "+a);
		System.out.println("b= "+b);
		System.out.println("c= "+c);
		
		System.out.println("-------");
		
		System.out.println("c= "+c+" - "+b);
		c=c-b;
		System.out.println("c= "+c);
		
		System.out.println("-------");
		
		System.out.println("???????");
	}
}
me da uma saida:
a=3;
b=5.2;
c=8.2
-------
c= 8.2 - 5.2
c= 2.999999999999999	
-------
???????

1 Resposta

T

Tanto 8.2 quanto 5.2 não podem ser representados exatamente em binário. Então 8.2 é armazenado como um número que é 8.2 mais ou menos um erro muito pequeno, e 5.2 é armazenado como um número que é 5.2 mais ou menos um erro muito pequeno.
Casualmente, quando você subtraiu um número do outro, os erros não se cancelaram, e acabou dando esse número que não é exatamente 3 mas é quase 3, tanto é que se o Java imprimisse o número com menos casas ele iria mostrar arredondado para o valor esperado (3.0).

Criado 21 de outubro de 2004
Ultima resposta 21 de out. de 2004
Respostas 1
Participantes 2