Je suis tombé sur l'exemple suivant sur wikipedia (http://en.wikipedia.org/wiki/Type_conversion#Implicit_type_conversion).Conversion de type implicite 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
}
Leur explication: « Ce comportement étrange est causée par une distribution implicite de i_value flotter lorsqu'il est comparé à f_value, un casting qui perd la précision, ce qui rend les valeurs comparées différentes. »
N'est-ce pas? Si i_value était lancé pour flotter, les deux auraient la même perte de précision et ils seraient égaux. Donc i_value doit être casté en double.
Avec g ++ (GCC 4.6.2), j'obtiens '1' pour l'égalité. –
@Kerrek: Et moi. En VS, je reçois 0. –
@OliCharlesworth: Je suis curieux de changer le littéral à 'f' ou le type à' double' - je reçois '1' dans tous les cas ... –