Test auf NaN



  • Hallo,

    ich habe das Problem, dass ich ein double auf NaN testen möchte.
    Allerdings darf man ja signaling NaNs nicht in arithmetischen Ausdrücken benutzen, was einen Test auf Gleichheit ausschließt (führt bei mir auch zu einer Floating-Point Excepton).

    In C99 gibt es Funktionen / Makros dafür - wie sieht es aber mit C++(98) aus?



  • _isnan

    MSDN 10s

    Bye, TGGC (Fakten)



  • Zusammenhang mit ANSI C++?

    Geh wieder ins Spieleforum. 😉



  • Leider entspricht nicht alles im MSDN dem Standard :p In C++ gibt es std::numeric_limits. Eine Referenz gibt es z. Bsp. hier!



  • Genau aus den numeric_limits habe ich mir auch schon eine NaN-Konstanze geholt. Aber um eine anderen double auf NaN zu testen, darf ich keinen Vergleich anstellen.



  • int isNan(double a){
            return (a != a);
    }
    
    int isNan2(double a){
            double testNaN = 0./0.;
            return !memcmp(&a,&testNaN,sizeof(a));
    }
    


  • TactX schrieb:

    int isNan(double a){
            return (a != a);
    }
    
    int isNan2(double a){
            double testNaN = 0./0.;
            return !memcmp(&a,&testNaN,sizeof(a));
    }
    

    Erste Variante geht leider nicht, da man ein NaN in einem arithmethischen Ausdruck verwendet. Das hagelt sofort eine Floatingpoint-Exception bei mir.

    Bei zweiterem gibt die Division durch 0 auch eine Floatingpoint-Exception. Allerdings siehst das memcmp interessant aus.



  • 7H3 N4C3R schrieb:

    Erste Variante geht leider nicht, da man ein NaN in einem arithmethischen Ausdruck verwendet. Das hagelt sofort eine Floatingpoint-Exception bei mir.

    Jo sorry, hab ich nicht dran gedacht.

    7H3 N4C3R schrieb:

    Bei zweiterem gibt die Division durch 0 auch eine Floatingpoint-Exception. Allerdings siehst das memcmp interessant aus.

    Hmm, da fällt mir aber ein, dass ein NaN ja nicht immer bitgenau zum einem anderen sein muss, oder? Evtl. musst da dann doch mit Bitrumgeschubse genauer testen...



  • 7H3 N4C3R schrieb:

    Zusammenhang mit ANSI C++?

    winheis schrieb:

    Leider entspricht nicht alles im MSDN dem Standard

    Eben das steht in der MSDN, das gibt der Unterstrich an.

    Bye, TGGC (Fakten)


Anmelden zum Antworten