Verifique dois valores float / double para a igualdade exata
O que é uma maneira elegante, legível e não detalhada de comparar dois valores de ponto flutuante para igualdade exata?
Por mais simples que possa parecer, é um problema perverso. o==
O operador não faz o trabalho para NaN e também tem tratamento especial para zero:
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
Mas eu quero determinar se dois valores são exatamente os mesmos (mas eu façonão cuidado com diferentes padrões NaN, então qualquer NaN == qualquer outro NaN -> verdadeiro).
I posso faça isso com este pedaço de código do monstro feio:
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
Existe uma maneira melhor de escrever isso (e tornar a intenção óbvia)?