C++11 double auf Nachkommastellen runden
-
--
-
Ja wie würdet ihr das denn angehen, wenn ihr Testfälle schreibt wo doubles von Berechnungen überprüft werden sollen?
Assert::AreEqual(myClass.foo() /* liefert double */, -32.44 /* gerundeter Erwartungswert */);
Ich hätte jetzt versucht das Ergebnis von foo() auch zu runden?
-
RundeSache schrieb:
Ja wie würdet ihr das denn angehen, wenn ihr Testfälle schreibt wo doubles von Berechnungen überprüft werden sollen?
Durch Angabe einer Toleranz:
BOOST_CHECK_CLOSE(1234.5, testVar, 0.00001);
-
daddy_felix schrieb:
RundeSache schrieb:
Ja wie würdet ihr das denn angehen, wenn ihr Testfälle schreibt wo doubles von Berechnungen überprüft werden sollen?
Durch Angabe einer Toleranz:
BOOST_CHECK_CLOSE(1234.5, testVar, 0.00001);Da gibt es noch mehr Möglichkeiten. Siehe hier.
-
Sone schrieb:
Siehe hier.
Dein Link schrieb:
This article is obsolete [...]
In short, stop reading. Click this link.
-
obulus schrieb:
Sone schrieb:
Siehe hier.
Dein Link schrieb:
This article is obsolete [...]
In short, stop reading. Click this link.... Gab es irgendeinen Grund, das zu zitieren?
-
Sone schrieb:
... Gab es irgendeinen Grund, das zu zitieren?
Ja, weil du den Inhalt deines Links offenbar sonst nicht liest. Hättest auch gleich richtig verlinken können.
-
Den kann auch jeder selbst anklicken. Aber gut...
-
Sowas ist ja auch Quatsch ... zumindest, wenn dein std::round double liefern soll.
Wieso soll das Quatsch sein wenn es double liefert?
-
homoioteleuton schrieb:
Sowas ist ja auch Quatsch ... zumindest, wenn dein std::round double liefern soll.
Wieso soll das Quatsch sein wenn es double liefert?
Wozu solltest du dann runden wollen und was wäre dein Ergebnis?
-
homoioteleuton schrieb:
Sowas ist ja auch Quatsch ... zumindest, wenn dein std::round double liefern soll.
Wieso soll das Quatsch sein wenn es double liefert?
...weil die Funktion nicht wirklich das tun kann, was sie verspricht. Das hat was mit der Menge der Zahlen zu tun, die du per double exakt darstellen kannst. -32,44 ist keine davon. Die nächsten beiden per double-Format darstellbaren Zahlen wären
-32,439999999999997726...
-32,440000000000004831...Dazwischen gibt es nichts. Die beiden Zahlen sehen deswegen so "krumm" aus, weil das Fließkommaformat (*) binär und nicht dezimal funktioniert. Das, was man sieht, wenn man einen double-Wert "ausgibt", ist auch immer nur eine gerundete Dezimaldarstellung, die den genauen double-Wert typischerweise nicht widerspiegelt.
(* Ich nehme hier einfach IEEE-754 an)