Comportamento inesperado dos números de ponto flutuante em C [duplicado]

Esta pergunta já tem uma resposta aqui:

Por que os números de ponto flutuante são imprecisos? 4 respostas

Eu tenho um snippet C simples da seguinte maneira:

#include<stdio.h>
#include<conio.h>

int main()    
{
    float a=0.3,b=0.5
    clrscr();

    if(a==0.3)
    {
        printf("equal");
    }
    else
    {
        printf("unequal");
    }

    if(b==0.5)
    {
        printf("equal");
    }
    else
    {
        printf("unequal");
    }

    getch();
}

mostra a saída como:unequal equal.

Eu entendo isso porque o computador leva0.3 Como1/3 e como0.333... não é igual a0.33, mostra a saída desigual, enquanto em0.5 é um número preciso, por isso fornece a saída comoequal.

Mas agora se eu pegarfloat b=0.2 como isso:

float b=0.2;
if(b==0.2)
{
    printf("equal");
}
else
{
    printf("unequal");
}

Então também mostraunequal como saída! Como0.2 é1/5 - valor preciso, deve dar saídaequal.

Alguém pode me dizer se algo está errado aqui?

questionAnswers(1)

yourAnswerToTheQuestion