Por que as comparações de valores de NaN se comportam de maneira diferente de todos os outros valores? Ou seja, todas as comparações com os operadores ==, <=,> =, <,> em que um ou ambos os valores são NaN retornam falso, ao contrário do comportamento de todos os outros valores.
Suponho que isso simplifique os cálculos numéricos de alguma forma, mas não consegui encontrar uma razão explicitamente declarada, nem mesmo nas Notas de Aula sobre o Status da IEEE 754 de Kahan, que discutem outras decisões de projeto em detalhes.
Esse comportamento desviante está causando problemas ao executar um processamento simples de dados. Por exemplo, ao classificar uma lista de registros com algum campo de valor real em um programa C, preciso escrever um código extra para manipular NaN como o elemento máximo, caso contrário, o algoritmo de classificação pode ficar confuso.
Edit: As respostas até agora argumentam que não faz sentido comparar NaNs.
Concordo, mas isso não significa que a resposta correta seja falsa, mas sim um Not-a-Boolean (NaB), que felizmente não existe.
Portanto, a escolha de retornar verdadeiro ou falso para comparações é arbitrária e, para o processamento geral de dados, seria vantajoso se obedecesse às leis usuais (reflexividade de ==, tricotomia de <, ==,>), para que estruturas de dados que dependem dessas leis ficam confusas.
Então, estou pedindo uma vantagem concreta de violar essas leis, não apenas o raciocínio filosófico.
Edit 2: Acho que agora entendo por que tornar NaN máximo seria uma má idéia, isso atrapalharia o cálculo dos limites superiores.
NaN! = NaN pode ser desejável para evitar a detecção de convergência em um loop, como
while (x != oldX) {
oldX = x;
x = better_approximation(x);
}
que, no entanto, deve ser melhor escrito comparando a diferença absoluta com um pequeno limite. Então, IMHO, esse é um argumento relativamente fraco para quebrar a reflexividade no NaN.
while (fabs(x - oldX) > threshold)
sair do loop se ocorrer convergência ou um NaN entrar na computação. A detecção do NaN e o remédio apropriado aconteceriam fora do circuito.