What is the rationale for all comparisons returning false for IEEE754 NaN values?

Warum verhalten sich Vergleiche von NaN-Werten anders als alle anderen Werte? Das heißt, alle Vergleiche mit den Operatoren ==, <=,> =, <,>, bei denen einer oder beide Werte NaN sind, geben entgegen dem Verhalten aller anderen Werte false zurück.

Ich nehme an, dies vereinfacht die numerischen Berechnungen auf irgendeine Weise, aber ich konnte keinen explizit angegebenen Grund finden, nicht einmal in derVorlesungsnotizen zum Status von IEEE 754 von Kahan, in dem andere Entwurfsentscheidungen ausführlich erörtert werden.

Dieses abweichende Verhalten verursacht Probleme bei der einfachen Datenverarbeitung. Zum Beispiel beim Sortieren einer Liste von Datensätzen w.r.t. Ein reales Feld in einem C-Programm Ich muss zusätzlichen Code schreiben, um NaN als maximales Element zu behandeln, da der Sortieralgorithmus sonst verwirrt werden könnte.

Bearbeiten: Die bisherigen Antworten sprechen alle dafür, dass der Vergleich von NaNs bedeutungslos ist.

Ich stimme zu, aber das bedeutet nicht, dass die richtige Antwort falsch ist, sondern dass es sich um einen Nicht-Booleschen Wert (NaB) handelt, den es glücklicherweise nicht gibt.

Daher ist die Wahl der Rückgabe von wahr oder falsch für Vergleiche aus meiner Sicht willkürlich, und für die allgemeine Datenverarbeitung wäre es vorteilhaft, wenn die üblichen Gesetze eingehalten würden (Reflexivität von ==, Trichotomie von <, ==,>), damit keine Datenstrukturen entstehen die auf diesen Gesetzen beruhen, werden verwirrt.

Also bitte ich um einen konkreten Vorteil, diese Gesetze zu brechen, nicht nur um philosophisches Denken.

Bearbeiten 2: Ich denke, ich verstehe jetzt, warum es eine schlechte Idee wäre, NaN maximal zu machen, und die Berechnung der Obergrenzen durcheinander bringen würde.

NaN! = NaN könnte wünschenswert sein, um das Erfassen der Konvergenz in einer Schleife wie z

while (x != oldX) {
    oldX = x;
    x = better_approximation(x);
}

Dies sollte jedoch besser durch Vergleichen der absoluten Differenz mit einer kleinen Grenze geschrieben werden. Meiner Meinung nach ist dies ein relativ schwaches Argument für die Aufhebung der Reflexivität bei NaN.

Antworten auf die Frage(13)

Ihre Antwort auf die Frage