Por que não podemos usar '==' para comparar dois números flutuantes ou duplos [duplicado]

Esta pergunta já tem uma resposta aqui:

Teste para igualdade de ponto flutuante. (FE_FLOATING_POINT_EQUALITY) 3 respostasPor que Double.NaN == Double.NaN retorna false? 9 respostas

Estou lendo Java eficaz por Joshua Bloch e emtem 8: Obedeça ao contrato geral ao substituir igual a, esta declaração está escrita

para campos flutuantes, use o método Float.compare; e para campos duplos, use Double.compare. O tratamento especial dos campos float e double é necessário pela existência de Float.NaN, -0.0f e pelas constantes duplas análogas;

Pode alguém me explicar, por exemplo, por que não podemos usar== para comparação flutuante ou dupla

questionAnswers(3)

yourAnswerToTheQuestion