Hi Leute, warum kommt bei folgender Rechnung "-1" und NICHT 0 raus?
1 | uint8_t x = 255; |
2 | int16_t y = -176, z = -690; |
3 | int16_t res = y - (z * (int32_t)x + 1000/2) /1000; |
Taschenrechner und Excel zeigen -0,5. Ist das nicht 0 bei nem int16_t ???
|
Forum: Mikrocontroller und Digitale Elektronik Compiler rechnet falsch Oder ich!Hi Leute, warum kommt bei folgender Rechnung "-1" und NICHT 0 raus?
Taschenrechner und Excel zeigen -0,5. Ist das nicht 0 bei nem int16_t ??? :
Verschoben durch Admin
Wenn ich das in den Taschenrechner eintippe (und vor allem die int-Division richtig mache), kommt auch -1 raus. Es gibt keine Nachkommastellen bei int, also schmeiß die beim nachrechnen sofort bei der Division raus! Und nicht erst damit weiter rechnen und am Ende rausstreichen. Merke: der Compiler hat immer* recht! *In 99,9999% der Fälle. Und die Fälle wo er nicht recht hat, sind dann meistens komplizierte, selten genutzte Spezialfälle der Sprache. Und, merke auch: Wer bei einfachen Bugs nach Compilierfehlern schreib, brandmarkt sich selber als Anfänger ;-) ich habs: int16_t res = ((int32_t) y * 1000 - (z * (int32_t)x + 1000/2)) /1000; :-) 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
Noch kein Account? Hier anmelden.
|
|