¿Salida extraña al comparar los mismos valores flotantes?

Comparación de los mismos valores flotantes en C

salida extraña en comparación de flotante con flotante literal

¿Además de flotación promovida a doble?

Leí los enlaces anteriores en puntos flotantes, pero incluso obtuve resultados extraños.

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

Ahora, de acuerdo con las reglas de promoción, no debería "Si no"debe ser impreso?

Pero, aquí está imprimiendo "SI"

EDITAR: ¿Es porque 0.5 = 0.1 en binario y todo es 0 después de eso y pérdida de precisión, por lo tanto, no hay efectos, por lo que la comparaciónSI devuelve verdadero

Si hubiera sido 0.1, 0.2, 0.3, 0.4, 0.6, 0.7 ...., entoncesSi no el bloque devuelve verdadero.

Perdón por hacerme la misma pregunta, porque he leído en los enlaces anteriores que nunca se debe hacer una comparación flotante.

Pero, ¿cuál es la razón de este comportamiento inesperado?

Respuestas a la pregunta(3)

Su respuesta a la pregunta