Zakładając, IEEE 754 zmiennoprzecinkową:
a >= b
zawsze równoważne b <= a
*
a >= b
odpowiada !(a < b)
, chyba że jeden lub oba a
lub b
NaN..
a == b
zawsze jest równoznaczne z b == a
. *
a == b
jest równoważna !(a != b)
, chyba że jeden lub oba a
lub b
jest NaN.
Bardziej ogólnie: trichotomia nie zawiera liczb zmiennoprzecinkowych. Zamiast tego, związanych nieruchomość posiada [IEEE-754 (1985) §5.7]: mniejszy, równy, większy niż i nieuporządkowana: możliwe są
Cztery wzajemnie wykluczające się relacje. Ostatni przypadek powstaje, gdy przynajmniej jeden operand jest NaN. Każdy NaN powinien porównywać nieuporządkowane ze wszystkim, w tym z samym sobą.
Należy pamiętać, że to nie jest tak naprawdę „anomalia” tyle wskutek rozszerzenia arytmetycznych być zamknięte w taki sposób, że stara się zachować spójność z prawdziwej arytmetyki, jeśli to możliwe.
[*] prawdziwe w abstrakcyjnej arytmetyce IEEE-754. W prawdziwym użyciu niektóre kompilatory mogą spowodować, że zostanie to naruszone w rzadkich przypadkach w wyniku wykonywania obliczeń z większą precyzją (MSVC, patrzę na ciebie). Teraz, większość obliczeń zmiennoprzecinkowych na architekturze Intel odbywa się na SSE zamiast na x87, to mniej niepokoi (i tak zawsze był to błąd z punktu widzenia IEEE-754).
Dołączyłem akapit drugi, aby wyjaśnić moje pytanie. Zgodnie z przyjętą odpowiedzią, wydaje się, że są one "symetryczne", ale nie "negowalne" z powodu NaN. – mwfearnley