Supponendo IEEE-754 virgola mobile:
a >= b
è sempre equivalente a b <= a
*
a >= b
è equivalente a !(a < b)
, a meno che uno o entrambi a
o b
è NaN..
a == b
è sempre equivalente a b == a
. *
a == b
equivale a !(a != b)
, a meno che uno o entrambi a
o b
è NaN.
Più in generale: tricotomia non valido per i numeri in virgola mobile. Invece, una proprietà correlate detiene [IEEE-754 (1985) §5.7]:
Quattro relazioni reciprocamente esclusivi sono possibili: minore, uguale, maggiore di, e non ordinata. L'ultimo caso si verifica quando almeno un operando è NaN. Ogni NaN si confronterà non ordinato con tutto, incluso se stesso.
noti che questo non è davvero una "anomalia" tanto come conseguenza di estendere l'aritmetica ad essere chiuso in modo che tenta di mantenere la coerenza con reale aritmetica quando possibile.
[*] vero in astratto aritmetica IEEE-754. Nell'uso reale, alcuni compilatori potrebbero causare la violazione di questo in rari casi come risultato di calcoli con precisione estesa (MSVC, sto osservando te). Ora che la maggior parte del calcolo a virgola mobile sull'architettura Intel viene eseguita su SSE anziché su x87, questo è meno preoccupante (ed è sempre stato un bug dal punto di vista di IEEE-754, comunque).
fonte
2010-09-14 15:06:26
Ho aggiunto un secondo paragrafo per chiarire la mia domanda. Come per la risposta accettata, sembrerebbe che siano "simmetrici" ma non "negabili" a causa dei NaN. – mwfearnley