Me encontré con el siguiente ejemplo en wikipedia (http://en.wikipedia.org/wiki/Type_conversion#Implicit_type_conversion).Conversión de tipo implícito en C
#include <stdio.h>
int main()
{
int i_value = 16777217;
float f_value = 16777217.0;
printf("The integer is: %i\n", i_value); // 16777217
printf("The float is: %f\n", f_value); // 16777216.000000
printf("Their equality: %i\n", i_value == f_value); // result is 0
}
Su explicación: "Este extraño comportamiento es causado por una conversión implícita de i_value flotar cuando se compara con f_value; un elenco que pierde precisión, por lo que los valores que se comparan diferentes"
¿No es esto incorrecto? Si se arrojó i_value para flotar, ambos tendrían la misma pérdida de precisión y serían iguales. Por lo tanto, i_value debe convertirse al doble.
Con g ++ (GCC 4.6.2) obtengo '1' para igualdad. –
@Kerrek: Y a mí. En VS, obtengo 0. –
@OliCharlesworth: tengo curiosidad por cambiar el literal a 'f' o el tipo a' doble' - obtengo '1' en todos los casos ... –