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