двойное и плавающее сравнение [дубликаты]

На этот вопрос уже есть ответ здесь:

Сравнивая поплавок и двойник 3 ответа

Согласно сэта почтапри сравнении числа с плавающей точкой и числа с двойным числом, число с плавающей точкой должно рассматриваться как двойное. Следующая программа, похоже, не следует этому утверждению. Поведение выглядит довольно непредсказуемо. Вот моя программа:

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;
}
Когда я запускаю следующую программу, я получаю сообщение об ошибке.Тем не менее, когда я изменяю a и b на 1,5, он отображает «успех».

Я также напечатал шестнадцатеричные обозначения значений. Они разные в обоих случаях. Мой компилятор Visual Studio 2005

Можете ли вы объяснить этот вывод? Благодарю.

Ответы на вопрос(4)

Ваш ответ на вопрос