porównanie podwójne i float [duplikat]

To pytanie ma już tutaj odpowiedź:

Porównywanie pływaka i podwójnego 3 odpowiedzi

Wedługten post, porównując float i double, float należy traktować jako double. Poniższy program nie wydaje się podążać za tym stwierdzeniem. Zachowanie wygląda dość nieprzewidywalnie. Oto mój program:

void main(void)
{
    double a = 1.1;  // 1.5
    float b = 1.1;   // 1.5
    printf("%X  %X\n", a, b);
    if ( a == b)
        cout << "success " <<endl;
    else
        cout << "fail" <<endl;
}
Po uruchomieniu następującego programu wyświetlany jest komunikat „nie działa”.Jednak gdy zmieniam a i b na 1.5, wyświetla się „sukces”.

Wydrukowałem również szesnastkowe zapisy wartości. Są różne w obu przypadkach. Moim kompilatorem jest Visual Studio 2005

Czy możesz wyjaśnić ten wynik? Dzięki.

questionAnswers(4)

yourAnswerToTheQuestion