double - zu ungenau??



  • Hallo,
    ich habe grade einen ziemlichen Schrecken bekommen. Ich rechne nämlich hier mit einigen mathematisch-physikalischen Konstanten, und bekomme für einen bestimmten Wert für meine double-Variable

    "expTerm = 2.22184e-09"

    heraus. Im nächsten Schritt rechne ich (x ist auch ein double)

    x = 1 - expTerm; 
                               cout << "1 - expTerm = " << x << endl;
    

    das allerdings gibt mir als Ergebnis "1 - expTerm = 1" aus!!!
    Bei einer solchen Genauigkeit könnte ich natürlich meine Rechnung gleich komplett vergessen. Wie kann ich die Genauigkeit erhöhen?
    mfg Bender



  • x = 1.0 - expTerm;



  • Hmm, das klappt bei mir auch nicht besser:

    #include <iostream.h>
    #include <stdlib.h>
    
    int main()
    {
          double expTerm=2.22184e-09;
          cout << "expTerm = " << expTerm << endl;
          expTerm=1.0-expTerm;
          cout << "1.0 - expTerm = " << expTerm <<endl;
          system("PAUSE");
          return 0;
    }
    

    ergibt bei mir wiederum
    "1.0-expTerm = 1"

    Liegt das an meinem Compiler oder doch an der Kleinhiet der Zahl (exp^{-9})?



  • Eigentlich dürfte es ja kein Problem sein, denn laut Literatur hat ein double
    64 bit und kann damit theoretisch einen Bereich von +-1.7*10^{-308} darstellen.
    In <float.h> ist zudem festgelegt, dass es bei double 52 Vorkommastellen gibt (Mantissenlänge 52). Dies sollte ja eigentlich ausreichen, um die angegebene Differenz richtig berechnen und auch ausgeben zu können...



  • cout<<setprecision(12);
    gibt ne andere 1



  • in der numeric_limits<T> gibt es epsilon das is bei double ^-16 das ist der wert bei welchem 1-wert=1 ist 🤡


Anmelden zum Antworten