die Anzahl der Nullen hinter dem Punkt ist egal...
sobald hinter einer Zahl ein ".0" kommt, wird sie als float behandelt (mit der entsprechenden Genauigkeit)
Druckbare Version
die Anzahl der Nullen hinter dem Punkt ist egal...
sobald hinter einer Zahl ein ".0" kommt, wird sie als float behandelt (mit der entsprechenden Genauigkeit)
Hi,
in der Zeile "way_end[ch] = way_akt[ch] / factor; " ist das auch schon so eine Sache...
way_akt[ch] ist doch ein uint16_t aber factor ist ein float oder double.
In dem Fall hast du nicht wirklich festgelegt, ob er jetzt mit floats oder mit ints rechnen soll.
Erst wenn du "way_end[ch] = (uint16_t)((double)way_akt[ch] / factor);" machst, kannst du dir wirklich sicher sein, dass er tut was du willst.
Das ist zwar übertrieben, da es vorher ja auch ging, allerdings ist es wirklich ärgerlich, wenn man lange nach einem Fehler sucht und es an einem fehlenden "(float)" lag.
Ich mache das deshalb bei Formeln mit verschiedenen Variablen-Typen immer so, dass der Compiler garnicht erst daran denken kann etwas anders zu machen als ich es will ;) ...
Dein 255.0000 ist allerdings wirklich übertieben, denn 255.0 reicht sicher. :)
Wer sich wirklich mit Compilern auskennt (ich tu es nicht), für den ist es völlig klar, was wann überflüssig ist und wann nicht, allerdings geh ich lieber auf Nummer sicher...
MfG Alex
ist eigentlich ganz einfach...
der Compiler wird keine verlustbehafteten Operationen ausführen (es sei denn man zwingt ihn dazu),
d.h. er wird nie aus einem float ein int machen, sondern immer umgekehrt. (das Ergebnis ist dann auch ein float)
mach mal einen typecast von float nach int, dann wirst du höchstwahrscheinlich eine Warnung vom Compiler erhalten
(da bei dieser Operation Daten verloren gehen)
Vielen Dank für eure Tipps!
Hab meine Zeile gerade auf
"way_end[ch] = (uint16_t)((double)way_akt[ch] / factor)"
geändert.
Ihr seid ein Schatz :-) !
Moin,
mich würde mal interessieren, wieviel mehr Flashspeicher die Rechnung in dieser Form verbraucht im Gegensatz zu der reinen Integer Rechung. Kannst du das mal kurz ausprobieren ??
MfG Kjion
Ja, Sorry. Ich wollte dir einen Viersatz unterjubbeln. Damit geht es ja nicht.Zitat:
Danke an Michael, durch seinen Tipp "DREISATZ" bin ich draufgekommen.