Fange an mich in C einzuarbeiten und bin auf folgendes Problem gestoßen.
Ich möchte prüfen ob 3 Variablen gleich Null sind. Und zwar auf diese weise (nicht mit UND oder Switch): if (a==b==c==0) printf…
Das funktioniert aber nicht. Es kommt Unwahr raus obwohl alle Variablen Null sind.
Habe die Null weggelassen if (a==b==c)…- funktioniert auch nicht.
Habe „c“ weggelassen- das funktioniert. Also
das Ergebnis von if (a==b)… ist Wahr.
Weiss jemand warum der o.g. Vergleich nicht funktioniert.
Die Variablen sind vom Typ float.
normalerweise wird davon abgeraten, Floats zu vergleichen, weil sie aufgrund der Rundung und abhängig von der internen Genauigkeit fast gleich sein könnten, aber trotzdem verschieden dargestellt (10.0/2 nicht notwendig gleich 5.). Für floats ist schon der Vergleich zweier Werte sauber nur mit (fabs(a-b)
da hätte ich mal ein Zwischenfrage. Ich nutze zwar C#, aber da ist der Syntax ja ähnlich.
Da ich hier noch Anfänger bin, stelle ich mir die Frage, ob ein Array hier auch geht oder ob das zuviel des Guten wäre?
So in der Art:
int i;
double a = 0.0;
double b = 1.5;
double c = 3.2;
double[] array = {a, b, c};
for (i = 0; i
Grüße
Habe die Null weggelassen if (a==b==c)…- funktioniert
auch nicht.
Also, noch mal zum mitschreiben:
Angenommen „a = b = c = 0;“
„a==b“ ergibt TRUE, also ungleich 0
„TRUE==c“ ergibt dann FALSE.
Die Variablen sind vom Typ float.
Bei Fliesskommazahlen ist ein Vergleich mit 0.0 in den meisten Fällen sowieso sinnlos.
Genau so, wie sich im Dezimalsystem z.B. 1/3 nicht mit endlicher Stellenzahl darstellen lässt, gibt es die selben Probleme bei der Umsetzung in ein binäres Zahlensystem. Typische Rechnung bei billigen Taschenrechnern: (1/3)*3 = 0.999999
Da die Stellenzahl der Mantisse endlich ist, ergeben sich Rundungsfehler bei den Rechenoperationen.
1*10-400 ist für einen Computer ungleich 0.0
Man sollte bei Fliesskommazahlen immer folgendermassen vergleichen:
Da ich hier noch Anfänger bin, stelle ich mir die Frage, ob
ein Array hier auch geht oder ob das zuviel des Guten wäre?
Hallo,
klar geht das, ist aber einen Tick ineffizienter während der Abarbeitung; deswegen würde ich die Nutzung der Array-Variante davon abhängig machen, ob sich die Anzahl der zu vergleichenden Werte ändern kann. Wenn es sich um z. B. eine Anzahl von Messwerten handelt, die leicht erhöht werden könnte, hat man wahrscheinlich eh’ ein Array, weil man die Werte dort ja auch hinein bekommen muss. Wenn es vom Problem her immer 3 Werte sein müssen, weil z. B. unterschiedliche Messsysteme über je ein Kabel einen Wert abliefern, würde ich bei einzelnen Variablen mit etwas aussagekräftigeren Namen bleiben.
im wesentlichen richtig, nur dass es heissen sollte: Wenn man a==b vergleicht und a und b floats oder doubles (c/c++) sind, so sollte man dieses tunlichst mit