Ist Vergleich von 2 wertgleichen Double-Variablen sicher?



  • Hallo!

    Mir ist klar, dass die Prüfung auf Gleichheit oder Ungleichheit von 2 Double-Zahlen in C++ unsicher ist, da die interne Darstellung nur eine begrenzte Genauigkeit hat. Leider finde ich im Internet nur Seiten, die entweder eine Double-Variable mit einer konkreten Zahl oder zwei beliebige Double-Variablen vergleichen und als Lösungsvorschlag eine Vergleichsmethode mit einer Fehlergröße Epsilon aufzeigen.
    Aber was ist, wenn eine Variable einer anderen zugewiesen wurde und beide somit nach meinem Verständnis auch die gleiche interne Darstellung haben müssten? Auf meine spezielle Frage habe ich aber noch keine Antwort gefunden.

    Ist folgender Code sicher?

    void test( double d )
    {
        double a = d;
        if ( a == d )
        {
            // trifft das immer zu?
        }
    }
    

  • Mod

    Der Vergleich wird bei "normalen" Werten (d.h. kein NaN) immer wahr sein, ja.

    edit: Obligatorischer Link, um dir die magischen Vorstellungen von Fließkommazahlen wieder auszutreiben, die dir eingeredet wurden:
    http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html



  • Dankeschön! 🙂


Anmelden zum Antworten