Hallo, wie genau funktioniert das runden beim Mikrocontroller, bzw. wie stabil ist es? Ich habe eine 8-Bit Variable point die z.B. folgendermaßen berechnet wird: point = (((216 * 144) / 100) - 56); Ergibt einen Wert von 255,04. Der Mikrocontroller macht daraus eine 255. Wie sicher ist es das daraus immer eine 255 wird? Ab wann würde er aufrunden, ab 255,5?
Kai wrote:
> Ab wann würde er aufrunden, ab 255,5?
Gar nie. Auch 255,9 ist in der Integerrechnung eine 255
Gerundet wird da garnicht, der Nachkommaanteil wird abgeschnitten wenn Du mit ints rechnest.
Rechenwert x 10, dann +5, danach wieder / 10. Das ergibt das kaufmännische Runden oder wie immer das heist. MW
Kai wrote: > Hallo, > > wie genau funktioniert das runden beim Mikrocontroller, bzw. wie stabil > ist es? > > Ich habe eine 8-Bit Variable point die z.B. folgendermaßen berechnet > wird: > > point = (((216 * 144) / 100) - 56); > > Ergibt einen Wert von 255,04. Der Mikrocontroller macht daraus eine 255. > Wie sicher ist es das daraus immer eine 255 wird? > > Ab wann würde er aufrunden, ab 255,5? In der Berechnung wird überhaupt nicht gerundet. Kommastellen (so es sie gäbe) werden einfach abgeshcnitten. Da in deiner Berechnung nur Ganzzahl-Werte (Integer) vorkommen, wird die ganze Berechnung mit Ganzzahlarithmetik gemacht. Genauso wie du es in der Grundschule gelernt hast: Eine Mutter hat 13 Äpfel und 4 Kinder. Wenn alle Kinder gleich viele Äpfel erhalten, wieviele Äpfel erhält dann jedes Kind und wieviele Äpfel bleiben der Mutter übrig 13 / 4 = 3 jedes Kind erhält 3 Äpfel und der Mutter bleiben 13 % 4 = 1 Apfel übrig. % ist die C Schreibweise für 'Rest bei einer Division'
Man sollte sich immer ueberlegen wie genau man eine Zahl haben muss. Das haengt auch mit den Eingangsvariablen zusammen. Wenn ein Sensor nur 1% genau ist, bringen Rechnungen mit 12 Stellen nichts.
Division der positiven Ganzzahlen a und b mit Abrunden:
1 | a/b |
Division der positiven Ganzzahlen a und b mit Aufrunden:
1 | (a+b-1)/b |
Division der positiven Ganzzahlen a und b mit Runden zur nächsten Ganzzahl:
1 | (a+b/2)/b |
Aber Vorsicht: Bei negativen Zahlen ist das Ergebnis prozessorabhängig.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.