Can anyone give explanation for output of this simple code?

why the output of this code is coming “B”? shouldn’t it come “C”? any possible explanation?

#include <cstdio>
int main()
{
float t = 0.7;
float q = 0.5;
if(t < 0.7)
{
if(q < 0.5) printf("A");
else printf("B");
}
else 
printf("C");
return 0;
}

Let me start with floating point comparisons are dangerous!!

a float variable can store only upto 5 digits after the decimal point. The reason float comparison works for 0.5 is beacuse 0.5 is easily expressed as a power of 2 in binary (2 ^ (-1)) while 0.7 is not easily expressed so errors come up when storing the number in binary form.Hence t< 0.7 is True but q<0.5 return False. Hope this makes it clear. would like to thank @tijoforyou for his explanation on this which helped me understand.

Due to loss of precision. Similar question here http://stackoverflow.com/questions/18377240/understanding-float-variable-comparison-in-if

And the doc, that I recommend to everyone asking these kinda qeustions: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

thanx… it made it clear…

Pls accept the answer and close this qn