Saída estranha ao comparar os mesmos valores de flutuação?

Comparando os mesmos valores flutuantes em C

saída estranha em comparação de float com float literal

Adição de bóia promovida para dobrar?

Eu li os links acima em pontos flutuantes, mas até obtendo uma saída estranha.

#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");
}

Agora, de acordo com as regras da promoção, não deveria "ELSE SE"deve ser impresso?

Mas aqui está imprimindo "E SE"

EDIT: É porque 0,5 = 0,1 em binário e tudo é 0 depois disso e perda de precisão, portanto, sem efeitos, então comparaçãoE SE retorna verdadeiro.

Se tivesse sido 0,1, 0,2, 0,3, 0,4, 0,6, 0,7 ...., entãoSenão se o bloco retorna verdadeiro.

Perdoe-me fazendo a mesma pergunta, porque li nos links acima que a comparação de flutuadores nunca deve ser feita.

Mas, qual é a razão desse comportamento inesperado?

questionAnswers(3)

yourAnswerToTheQuestion