Alexander (HH): C: Verlinken statischer Bibliothek führt zu falschem Ergebnis

Beitrag lesen

Moin Moin!

Hallo,

»» »» if (arrused != 0)
»»
»» Auch wenn arrused<0? Nicht gut.

Kommt nicht vor, da man ja bei 0 anfängt zu zählen und nicht bei Minuszahlen.

Deine Funktion definiert arrused als signed int, und der kann negativ werden - auch gelegentlich mal durch ein ++.

Wenn Du garantiert nur zählst, nimm keine signed ints, sondern ein unsigned int, unsigned long, oder unsigned long long.

»» »» return wert /= arrused;
»» »»
»» »» return wert;
»»
»» x/0=0? Mein Mathelehrer rotiert im Grabe!

Wie kommst du auf x/0?

Definition des Durchschnitts: Summe aller Einzelelemente geteilt durch die Anzahl der Elemente.

Wenn arrused ungleich 0 ist, berechnest Du wert/arrused und gibst das zurück. (Die Zuweisung an wert halte ich da übrigens für unnötig.) Ansonsten ist wert=0.0 und arrused=0.

Du lieferst für das Ergebnis einer Division durch 0 schlicht 0 zurück, und das ist falsch.

Was ist der Durschnitt einer einzelnen Zahl?

Falsche Frage.

Trotzdem erstmal die Antwort: Die Zahl selbst. Das wird durch if (arrused != 0) return wert /= arrused; korrekt abgedeckt.

Was ist der Durchschnitt einer leeren Liste, wenn arrused==0?

Er ist nicht definiert, Du gibst aber 0.0 zurück.

»» Und was passiert, wenn c weder NUL noch Ziffer noch Punkt ist?

Darum kümmert sich glücklicherweise atof.

"Rhababerquark" hältst Du also für eine gültige Eingabe, wenn nach einer Gleitkommazahl gefragt ist?

strtod gibt Dir hier eine klare Aussage, dass Müll eingegeben wurde, atof verschweigt Dir das und liefert stattdessen eine willkürlich ausgesuchte Zahl.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".