Неожиданное поведение чисел с плавающей точкой в C [дубликат]
На этот вопрос уже есть ответ здесь:
Почему числа с плавающей запятой неточные? 4 ответаУ меня есть простой фрагмент кода C следующим образом:
#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();
}
показывает вывод как:unequal equal
.
Я понимаю это, потому что компьютер берет0.3
как1/3
и в качестве0.333...
не равно0.33
показывает неравный выходной сигнал, а в0.5
точное число, так что это дает вывод какequal
.
Но теперь, если я возьмуfloat b=0.2
как это:
float b=0.2;
if(b==0.2)
{
printf("equal");
}
else
{
printf("unequal");
}
Тогда это также показываетunequal
как выходной! Как0.2
является1/5
- точное значение, оно должно дать выводequal
.
Может кто-нибудь сказать мне, если что-то здесь не так?