Minha impressão ingênua é que sempre se testaria a diferença em relação a alguma tolerância epsilon. Estou errado? O teste da igualdade de carros alegóricos pode ser significativo em certos contextos?
Não há receitas únicas. Em este artigo não é um tratamento exaustivo, onde pode ser encontrada uma resposta completa com técnica e código.
Em resumo, existem principalmente três casos:
- comparando com zero
- comparando com um diferente de zero
- comparando dois números arbitrários
Sua ideia de usar uma comparação contra uma tolerância é boa para alguns casos, mas também há uma técnica baseada na Unidade em último lugar ( ULP ), descrita dentro do artigo
Estou implícito assumindo que o uso do operador de igualdade em carros alegóricos é realmente significativo em alguns contextos; caso contrário, por que a maioria das linguagens de programação o permitiria.
Como acima, há situações em que você pode usá-lo, mas seja avisado. Por exemplo, o compilador gcc possui um aviso:
warning: comparing floating point with == or != is unsafe
Atualizar
Acrescento algumas considerações acima desse argumento e elas não estão estritamente relacionadas ao caso a == b
.
Igualdade com expressão
Considerando o caso:
a + b == c
a b c
a ⊕ bfl ( fl (a)+ fl (b))= = c= = fl (c)
∣∣∣umaa + b∣∣∣e r ruma+ ∣∣∣ba + b∣∣∣e r rb
e r rx= | x - feu ( x ) || x |
Portanto, neste caso, o uso de ==
é mais delicado.
Portando em ambientes diferentes
Quando portamos um código em ambientes diferentes (máquina diferente), podemos obter resultados diferentes (por exemplo, tente pensar em teste de unidade). Também no caso, o uso de ==
é delicado.