double wird immer mit e ausgegeben!
-
Ich lasse mit eine double ausgeben und diese wird immer mit komischen e werten ausgegeben (zb double x=0 -> igendwelche zahlen e-308).
wie bekomme ich es denn hin das nur null ausgegeben wird?
-
Leg ein epsilon fest für dass du sagen willst:
"Das lassen wir noch als Null durchgehen"zB
if( fabs(double_wert) <= 10*std::numeric_limits<double>::epsilon() ) double_wert = 0; cout << double_wert << endl;
-
blöde frage aber wie mache ich das?
was steht denn in
epsilon()
?
-
std::numeric_limits<T>::epslion()
gibt die kleinstmögliche Zahl nach Null zurück die der Typ T annehmen kann.
-
fabs: Weil die Zahl ja auch
-0.0000000000000000000001 sein kann
fabs macht da was positives draus<= x*EPSILON
Wenn dieser Postive wert nunmal kleiner als dein Espilon ist machst dudouble_wert = 0;
0 draus
EPSILON kannst du natürlich wählen wie du willst, kannst auch 0.5 nehmen.
muss ja nich numeric_limits sein ....
-
if( fabs(name.re) <= 4*numeric_limits<double>::epsilon()) os << "0";bekomme als fehler meldung:
..\src\complex.cpp:107: error: expected `)' before 'double'
-
#include <limits>
-
Danke!!
-
Ehm, also der folgende Code gibt bei mir immer 0 aus und niemals etwas mit einem
e.double x = 0.0; std::cout << x << std::endl;Suchst du nicht eher das hier?
http://www.cplusplus.com/reference/iostream/manipulators/fixed/Falls nach der Berechnung dein Wert abweicht, bzw. kleinste Ungenauigkeiten hat, dann kann man das eben über ein Epsilon runden, weil halt Gleitkommazahlen nicht genau sind. Dazu solltest du mal lesen, was eine Gleitkommazahl ist.
Grüssli
-
Das habe ich mal vor kurzen gesehen ...
void eleminiere_berechungsungenauigkeit( float f ) { float ret=0; std::stringstream stream; stream << f; stream >> ret; return ret; }... es funkioniert anscheinend aber ich habe keine Ahnung wieso!
