Comportamiento inesperado de doble tipo de datos primitivos
Quiero entender como el javadouble
tipo almacenará su valor en memoria en Java. Cuando ejecuto el siguiente código obtengo resultados inesperados:
public static void main(String[] args) {
float a = 1.5f;
float b= 0.5f;
double c= 1.5;
double d = 0.5;
float a1 = 1.4f;
float b1= 0.5f;
double c1= 1.4;
double d1 = 0.5;
System.out.println(" a- b is " + (a-b));
System.out.println(" c- d is " + (c-d));
System.out.println("a1-b1 is " + (a1-b1));
System.out.println("c1-d1 is " + (c1-d1));
}
Salida:
a- b is 1.0 c- d is 1.0 a1-b1 is 0.9 c1-d1 is 0.8999999999999999
Por que esc1-d1
no igual a0.9
?
También probé otros valores diferentes, pero en algún momento devolvió el resultado esperado y en algún momento no.