Comportamiento inesperado de los números de coma flotante en C [duplicado]
Esta pregunta ya tiene una respuesta aquí:
¿Por qué los números de coma flotante son inexactos? 4 respuestasTengo un fragmento de C simple de la siguiente manera:
#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();
}
muestra la salida como:unequal equal
.
Entiendo esto porque la computadora toma0.3
como1/3
y como0.333...
no es igual a0.33
, muestra resultados desiguales, mientras que en0.5
es un número preciso por lo que da salida comoequal
.
Pero ahora si tomofloat b=0.2
Me gusta esto:
float b=0.2;
if(b==0.2)
{
printf("equal");
}
else
{
printf("unequal");
}
Entonces también muestraunequal
como salida! Como0.2
es1/5
- valor preciso, debería dar salidaequal
.
¿Alguien puede decirme si algo está mal aquí?