Un conjunto flotante a 0.1 compara falso contra 0.1

int main() { float f = 0.1; if (f == 0.1) printf("True"); else printf("False"); } 

Solo soy un principiante en c. No entiendo el comportamiento del progtwig anterior. La salida es falsa. ¿¿Por qué??

0.1 es un double literal.

Como 0.1 no se puede representar exactamente en punto flotante, un conjunto float a 0.1 comparará falso contra un double conjunto a 0.1.

Su comparación se comportaría según lo previsto si utiliza un literal float : 0.1f (tenga en cuenta que el sufijo f : no debe confundirse con el nombre de su variable):

 float foo /*renamed for clarity*/= 0.1; if (foo == 0.1f){ /*this will compare true*/