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.


Anmelden zum Antworten