Saída estranha ao comparar os mesmos valores de flutuação?
Comparando os mesmos valores flutuantes em C
saída estranha em comparação de float com float literal
Adição de bóia promovida para dobrar?
Eu li os links acima em pontos flutuantes, mas até obtendo uma saída estranha.
#include<stdio.h>
int main()
{
float x = 0.5;
if (x == 0.5)
printf("IF");
else if (x == 0.5f)
printf("ELSE IF");
else
printf("ELSE");
}
Agora, de acordo com as regras da promoção, não deveria "ELSE SE"deve ser impresso?
Mas aqui está imprimindo "E SE"
EDIT: É porque 0,5 = 0,1 em binário e tudo é 0 depois disso e perda de precisão, portanto, sem efeitos, então comparaçãoE SE retorna verdadeiro.
Se tivesse sido 0,1, 0,2, 0,3, 0,4, 0,6, 0,7 ...., entãoSenão se o bloco retorna verdadeiro.
Perdoe-me fazendo a mesma pergunta, porque li nos links acima que a comparação de flutuadores nunca deve ser feita.
Mas, qual é a razão desse comportamento inesperado?