Natknąłem się na następujący przykład na wikipedia (http://en.wikipedia.org/wiki/Type_conversion#Implicit_type_conversion).Niejawna konwersja typu w 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
}
Ich wyjaśnienie: „To dziwne zachowanie spowodowane jest niejawny obsady i_value się unosić, gdy jest ona w porównaniu z f_value; odlew, który traci precyzję, dzięki czemu wartości są porównywane inny”
Czy to nie jest złe? Jeśli i_value zostały wyrzucone do float, to oba miałyby tę samą stratę w precyzji i byłyby równe. Tak więc i_value należy odrzucić, aby podwoić liczbę.
Z g ++ (GCC 4.6.2) Otrzymuję "1" dla równości. –
@Kerrek: I ja. W VS otrzymuję 0. –
@OliCharlesworth: Jestem ciekawa zmiany literału na 'f' lub typ na' double' - otrzymuję '1' we wszystkich przypadkach ... –