Vergleich zweier NAN-Werte in C ++

8

Ich habe eine Anwendung, in der ein Codebereich NAN-Werte erzeugt. Ich muss die Werte für die Gleichheit vergleichen und basierend darauf den Rest des Codes ausführen. Wie zwei NAN-Werte in C ++ für Gleichheit zu vergleichen?

    
CodeRider 07.03.2013, 10:35
quelle

3 Antworten

17

Unter der Annahme einer Gleitkommadarstellung nach IEEE 754 können Sie nicht zwei NaN-Werte für die Gleichheit vergleichen. NaN ist keinem Wert gleich, einschließlich sich selbst. Sie können jedoch testen, ob sie beide NaN mit std::isnan aus dem Header <cmath> sind:

%Vor%

Dies ist jedoch nur in C ++ 11 verfügbar. Vor C ++ 11 war das Boost Math Toolkit bietet einige Fließkomma-Klassifikatoren . Alternativ können Sie überprüfen, ob ein Wert NaN ist, indem Sie ihn mit sich selbst vergleichen:

%Vor%

Da NaN der einzige Wert ist, der nicht sich selbst ist. In der Vergangenheit haben einige Compiler das vermasselt, aber ich bin mir im Moment des Status nicht sicher (es scheint korrekt mit GCC zu funktionieren).

MSVC bietet eine Funktion _isnan .

Die letzte Alternative besteht darin anzunehmen, dass Sie wissen, dass es sich bei der Darstellung um IEEE 754 handelt, und prüfen Sie etwas. Offensichtlich ist dies nicht die portabelste Option.

    
Joseph Mansfield 07.03.2013, 10:39
quelle
3

Was pre-C ++ 11 betrifft, Dafür gibt es auch einen Schub .

%Vor%     
Bartek Banachewicz 07.03.2013 10:50
quelle
2

Irgendein gegebenes NaN ist nichts gleich, es wird niemals einem anderen NaN gleich sein, daher ist es sinnlos, sie miteinander zu vergleichen.

Aus GNU-Dokumenten:

  

NaN ist ungeordnet: es ist nicht gleich, größer oder kleiner als alles, einschließlich sich selbst. x == x ist falsch, wenn der Wert von x NaN ist. Quelle

    
Tony The Lion 07.03.2013 10:38
quelle

Tags und Links