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 respostasEu 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?