Hallo Leute, mein Compiler sagt mir wenn ich eine Division durch 2 folgendermaßen Rechne: x = 1E4/2 "region Text overflow by 200byte" hingegen: x = 10000/2 "alles toll mach weiter so" Warum ist das so? Wird das auf float gecastet? Wenn wir schonmal dabei sind. Sollte ich lieber shiften oder explizit durch 2 dividieren? geshiftet wird ein (immer) uint16_t. Viele Grüße
Thomsen schrieb: > Warum ist das so? Wird das auf float gecastet? Wieso gecastet? 1E4 ist ein float. (Eigentlich ein double, aber so genau nehmen wirs heute nicht) > Wenn wir schonmal dabei sind. Sollte ich lieber shiften oder explizit > durch 2 dividieren? geshiftet wird ein (immer) uint16_t. Wenn dividieren die logische Erklärung für die Operation ist, dann schreib auch dividieren. Wenn schieben die logische Erklärung für die Operation ist, dann schreib schieben. Wenn eine Division durch Schieben schneller relisierbar ist, dann ersetzt dir das der Compiler. Das ist nichts worüber du dir Gedanken machen musst, solange du die korrekten Datentypen benutzt.
Karl heinz Buchegger schrieb: > Wenn eine Division durch Schieben schneller relisierbar ist, dann > ersetzt dir das der Compiler. Aber nur, wenn der auch optimieren darf. Und in diesem Fall würde das Problem gar nicht auftreten, denn dann würden alle konstanten Ausdrücke schon zur Compilezeit berechnet. Oliver
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.