условие оценивается как

ение одинаковых значений с плавающей точкой в ​​C

странный вывод по сравнению с float с литералом float

Поплавок дополнения повышен в два раза?

Я прочитал вышеупомянутые ссылки с плавающей запятой, но даже получаю странный вывод.

#include<stdio.h>
int main()
{
    float x = 0.5;

    if (x == 0.5)
        printf("IF");

    else if (x == 0.5f)
        printf("ELSE IF");

    else
        printf("ELSE");
}

Теперь, согласно правилам продвижения, не стоит »Иначе"должен быть напечатан?

Но вот это печатьЕСЛИ"

РЕДАКТИРОВАТЬ : Это потому, что 0,5 = 0,1 в двоичном коде, и после этого все равно 0 и потеря точности, следовательно, не дает никаких результатов, поэтому сравнениеЕСЛИ возвращает истину.

Если бы это было 0,1, 0,2, 0,3, 0,4, 0,6, 0,7 ..., тоОстальное если блок возвращает истину.

Извините, что задаю тот же вопрос, потому что я прочитал из вышеупомянутых ссылок, что сравнение с плавающей запятой никогда не должно выполняться

Но какова причина этого неожиданного поведения?

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

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