www.mikrocontroller.net

Forum: Compiler & IDEs 1E4 > 10000 ?


Autor: Thomsen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.