Mi sono imbattuto nel seguente esempio su wikipedia (http://en.wikipedia.org/wiki/Type_conversion#Implicit_type_conversion).Conversione implicita del tipo in 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
}
loro spiegazione: "Questo comportamento dispari è causato da un cast implicito di i_value galleggiare quando viene confrontato con f_value; un cast che perde precisione, rendendo i valori a confronto diverso"
Non è sbagliato? Se i_value venisse eseguito il cast, allora entrambi avrebbero la stessa perdita di precisione e sarebbero uguali. Quindi i_value deve essere castato per raddoppiare.
Con g ++ (GCC 4.6.2) ottengo '1' per l'uguaglianza. –
@Kerrek: E io. In VS, ottengo 0. –
@OliCharlesworth: Sono curioso di cambiare il letterale in 'f' o il tipo in' double' - Ottengo '1' in tutti i casi ... –