Error de Java/inconsistencia al agregar valores float e int
Verifica este código:
public static void checkBug() {
int a = 16763383;
int b = 16763383;
<pre><code> float myFloat = 222778.0f;
int myInt = 222778;
a += myInt;
b += myFloat;
System.out.println("A is : " + a + " and B is: " + b);
}
</code></pre>
El resultado es A is : 16986161 and B is: 16986160
¿Por qué esta discrepancia? He estado probando con muchos valores de a
, b
, myFloat
y myInt
, pero no pude encontrar una explicación adecuada de por qué ocurre con estos valores particulares.
Además, puedo ejecutar/compilar b += myFloat;
pero no puedo hacerlo con b = b + myFloat;
.
davy.ai
La discrepancia ocurre debido a la diferencia de precisión entre los valores de punto flotante y los valores enteros. En este código, se añade
myInt
aa
, lo que resulta en un valor entero. Sin embargo, se añademyFloat
ab
, lo que resulta en un valor de punto flotante. Cuando se imprime los resultados, el valor dea
es la suma esperada de los dos enteros, mientras que el valor deb
tiene una pequeña discrepancia debido a la limitada precisión de los valores de punto flotante.En cuanto a la segunda pregunta, es posible que el operador
+=
esté siendo sobrecargado para manejar la adición de un valor de punto flotante a una variable entera, mientras que el operador+
requiere una conversión explícita entre los dos tipos de datos. Esto explicaría por québ += myFloat;
compila y se ejecuta correctamente, mientras queb = b + myFloat;
resulta en un error de compilación.