Erro ao comparar números float na condição do if
Olá a todos.
Observem o seguinte código extremamente simples:
#include <stdio.h>
int main()
{
float n1 = 9.8;
if (n1 == 9.8)
{
printf("ok!\n\n");
}
printf("Fim do programa...!\n");
scanf("%*c");
return 0;
}
Esse código não gera a frase ok! porque o compilador não enxerga n1 igual 9.8 apesar de, visualmente, a condição ser verdadeira devido a comparação entre números reais idênticos.
Porém, quando eu insiro cast antes do 9.8 na condição do if o código funciona corretamente: if (n1 == (float) 9.8)
Esse problema só existe quando eu uso números reais do tipo float diferentes de 9.0 e 9.5, ou seja, escrevendo dessa forma if (n1 == 9.0) ou desta outra forma if (n1 == 9.5), sem cast, o código funciona perfeitamente.
Para números dos tipos int e double esse problema de comparação na condição do if não ocorre.
Estou usando o codeblocks, com compilador GCC, no windows 7, processador i3, 64bits.
Alguém com mais anos de prática na Linguagem C poderia esclarecer por qual razão o tipo floatnecessita de casting na condição do if?
Discussão (7)
Carregando comentários...