Forum: Compiler & IDEs 1E4 > 10000 ?


von Thomsen (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Oliver (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.