Komischer Fehler.. oder ich seh ihn nich!?
-
Will double Werte vergleichen, unter berücksichtigung von Toleranzen, und hab so folgendes Maktor geschrieben:
#define TOLERANZ 0.01 #define COM_TOL(A,B) (fabs(A - B) < TOLERANZ)wenn ich nun mit
ASSERT(COM_TOL(1.000000, 0.9999999);werte überprüfe kommt ein fehler aber ich frge mich warum?
wenn ich das so mache (eigentlich der gleiche Code) dann geht es:
double res= fabs(1.0000000 - 0.999999999); BOOL l= (res < 0.01); ASSERT(l);
-
BorisDieKlinge schrieb:
wenn ich nun mit
ASSERT(COM_TOL(1.000000, 0.9999999);werte überprüfe kommt ein fehler aber ich frge mich warum?
Über 1000 Beiträge, aber immernoch nicht gelernt wie man Fehler beschreibt?
Tipp: In dem Auszug ist die Klammersetzung ...merkwürdig...
-
sorry:
ASSERT(COM_TOL(1.000000, 0.9999999));die Klammer stimmen schon es lässt sich kompilieren...
nur kommt ein ASSERT was ich nich verstehe....
ok noch mal genau:
Code A:
#define TOLERANZ 0.01 #define COM_TOL(A,B) (fabs(A - B) < TOLERANZ) //Ausführen ASSERT(COM_TOL(1.000000, 0.9999999);Code B:
double res= fabs(1.000000- 0.9999999); BOOL l= (res < 0.01); ASSERT(l);Code A und B sind aquivalent, doch bei A wird ASSERT Aufgerufen, und bei B nicht!! Warum?
-
BorisDieKlinge schrieb:
Code A und B sind aquivalent, doch bei A wird ASSERT Aufgerufen
Bei mir nicht. Ist das der ganze Code? Oder hast du vielleicht irgendwo noch irgendwelche anderen Makros?
Warum lässt du das Gewurschtel mit den Makros nicht endlich? Noch nicht genug Probleme damit gehabt?
-
ok MFK ... dann pack ich das in ne Funktion.. aber trozdem wo liegt der fehler?
daran:
alt:
COM_TOL(A,B) (fabs(A - B) < TOLERANZ)neu:
COM_TOL(A,B) (fabs(A - B)) < TOLERANZ
-
BorisDieKlinge schrieb:
aber trozdem wo liegt der fehler?
In dem gezeigten Code ist kein Fehler (wenn man von der fehlenden Klammer absieht). Wie gesagt, bei mir schlägt die Assertion nicht fehl.
-
hmm.. super.. das ist also ne Anomalie von makros, das sie ab und zu noch funktionieren wie sie sollen?
-
BorisDieKlinge schrieb:
hmm.. super.. das ist also ne Anomalie von makros, das sie ab und zu noch funktionieren wie sie sollen?
Nein.
Makros erschweren "nur" die Fehlersuche. Meine Frage, ob das der ganze Code ist, hast du leider nicht beantwortet. Aber dieses Programm läuft ohne Assertion durch:
#include <cassert> #include <cmath> using namespace std; #define TOLERANZ 0.01 #define COM_TOL(A,B) (fabs(A - B) < TOLERANZ) int main() { assert(COM_TOL(1.000000, 0.9999999)); }Wenn es das bei dir nicht tut, solltest du dir vielleicht einen anderen Compiler zulegen.
-
hab den fehler:
#define COM_TOL(A,B) (fabs(A - (B)) < TOLERANZ)muss B klammernm weil sich B aus mehre double werten summiert, was ich nich berücksihtig habe
fabs(A-b1+b2+b3) und es muss natürlich geklammert sein..
aber danke.. ich mach trozdem in ne funktion @ MFK

-
BorisDieKlinge schrieb:
aber danke.. ich mach trozdem in ne funktion @ MFK


-
BorisDieKlinge schrieb:
hmm.. super.. das ist also ne Anomalie von makros, das sie ab und zu noch funktionieren wie sie sollen?
Über tausend Beiträge und immer noch nicht den Spruch "Macros are evil!" gehört?

-
ich muss erst par mal auf die schnautze fliegen bis ich lerne;) hehe
-
BorisDieKlinge schrieb:
ich muss erst par mal auf die schnautze fliegen bis ich lerne;) hehe
Es gibt auch Leute, die lernen aus den geschwollenen Backen Anderer.
Musst selbst entscheiden, wer/was schlauer ist.

Gruß,
Simon2.