Double NaN Problem
-
Hallo zusammen!
Ich habe ein kleines Problem mit NaN-Werten bei Double und hoffe, dass mir jemand von euch helfen kann.
Ich habe eine Klasse geschrieben, die .TDM Dateien (das sind XML-Dateien) ausliest. Diese Datei enthält Messwerte und es kommen dabei auch NOVALUES vor die von einer anderen Application (DIAdem) gesetzt werden. DIAdem speichert für NOVALUES eben diese NaN-Werte in die .TDM Dateien.
Jetzt habe ich aber auch noch eine C++ DLL in der ich eine Reihe von mathematischen Funktionen programmiert habe. Diese Funktionen sollen die NaN-Werte erkennen.
Also brauch ich sowas wie ein #define NOVALUE .....
Die Frage ist jetzt wie ich das definieren soll. Bei Wikipedia habe ich gelesen, dass es für Double sehr viele verschiedene NaN-Werte gibt.
Gibt es denn kein universelles NaN?Vielen Dank schonmal im voraus
mfg Tom
-
Ja, es gibt einen ganzen Bereich von NaN-Werten. Die von C++ verwendeten kannst du mit
std::numeric_limits<double>::quiet_NaN()bzw.std::numeric_limits<double>::signalling_NaN()erhalten. Und um festzustellen, ob eine Variable (irgend)einen NaN-Wert enthält, kannst du das hier verwenden:#define isnan(x) !(x==x) //alle Vergleiche zwischen NaN-Werten liefern false
-
Danke für die info
-
@CStoll: was liefert dein "isnan" define bei +INF, -INF? Und ist das konsistent über verschiedene Plattformen oder CPU-abhängig?
@TomTom85: wenn du die NAN Werte explizit behandeln willst würde ich sagen ein "quiet NAN" ist der "universelle" NAN Wert.