Evolver schrieb:
Hmm, ich bin am verzweifeln. Auch das funktioniert nicht. Wahrscheinlich sitz ich heut schon zu lang davor, um den Fehler zu finden.
#define MAXDIFF 0.00001
...
double rest_g = TA->g_lv;
for(int i=0; i<anzX; i++)
{
if(TA->x[index[i]]==LEER) rest_g -= g[index[i]];
if(abs(rest_g)<=MAXDIFF)
{
TA->alpha = i;
break;
}
}
...
So funktioniert der Vergleich noch nichtmal, wenn ich ganzzahlige Werte eingebe. Wo liegt denn mein Fehler?
Hier findet kein Vergleich auf in Relation zu 0 statt, sondern hier wird gefragt, ob etwas kleiner 0 ist. -1000 ist auch kleiner als Null, aber liegt ausserhalb Deines Deltas.
Evolver schrieb:
if((rest_g<0) && (abs(rest_g)>MAXDIFF))
Was machst Du, wenn rest_g positiv ist, aber trotzdem im Bereich von MaxDelta liegt? Dann greift die Bedingung nicht!?
Was willst Du denn überhaupt vergleichen, möchtest Du Fragen, ob etwas etwa 0 ist, dann benutze doch einfach die Equals-Funktion, die ich oben notiert habe.
Oder möchtest Du Fragen, ob etwas kleiner 0 ist und weiter als MAXDELTA von 0 entfernt?
if( (rest_g<0) && !Equals( rest_g, 0 ) ) ... // entspricht rest_g < 0 für integers
oder etwas spezialisierter (=> schneller):
if( (rest_g<0) && rest_g < (-MAXDELTA) ) ) ... // entspricht rest_g < 0 für integers
Ich hoffe Dir bei Deinem Problem helfen zu können, aber ich weiß nicht genau weiß, was Dein Problem letztendlich überhaupt ist/war?
Falls nicht, beschreib' es bitte genauer, das erspart das Rumraten und beschleunigt für Dich die Antwort