- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 8 von 8

Thema: Punktrechnung vor Strichrechnung ???

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.06.2011
    Beiträge
    158
    Also ich hab mir einfach angewoehnt, alles zu klammern sobald auch nur der geringste Zweifel besteht.
    Und ich hab fast alles durch, von APL bis Z80-Assembler

    Mit Punktrechnung vor Strichrechnung kommst nicht weit, APL ist gleich das erste Beispiel (Auswertung strikt von rechts(!) nach links), Forth ein weiteres ...

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Addition vor Shift:
    http://de.wikibooks.org/wiki/C-Progr...Priorit%C3%A4t

    Das Stichwort lautet "Bindung der Operatoren"

    "...alles zu klammern sobald auch nur der geringste Zweifel besteht." praktiziere ich auch.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    42
    Beiträge
    1.780
    Klammern ist immer gut, dadurch werden solche Ausdrücke auch besser lesbar
    (wenn man trotzdem das Gefühl hat ein Ausdruck wäre mit Klammern schlechter lesbar, dann ist der Ausdruck zu lang und sollte ohnehin in mehrere leichter verdauliche Häppchen zerlegt werden)


    Vielleicht noch eine Kleinigkeit zur Verwendung von Shifts als Ersatz für Multiplikation oder Division:
    Normalerweise tut man das aus Performancegründen, aber nicht immer ist diese Variante auch tatsächlich schneller. Ein ATmega z.B. hat üblicherweise einen eingebauten Multiplizierer, der für eine 8x8 Bit Multiplikation genau 2 Takte benötigt. Ein Linksshift hingegen benötigt nur einen Takt, also müssten Multiplikationen damit ja doppelt so schnell laufen, korrekt?

    Falsch!
    Denn was viele übersehen ist, daß ein ATmega keinen Barrel-Shifter hat, d.h. er kann mit einem Shift-Befehl auch nur um ein Bit shiften. Es bleibt also nur ein einziger Fall übrig bei dem der Shift tatsächlich schneller ist, und das ist die Multiplikation mit 2.

    Programmiert man in Assembler fällt das sofort auf, da die Shift Befehle jeweils nur einen Operanden haben (nämlich das zu shiftende Register). In C hingegen merkt man das überhaupt nicht (wer käme schon auf die Idee, daß "<< 7" mehr Befehle braucht als "<< 2").

    Dazu kommen natürlich noch die schon erwähnten Sonderfälle die man beachten muss, wenn die Ergebnisse auch korrekt sein sollen.


    Das nur mal als kleiner Hinweis am Rande, daß vermeintliche Optimierungen manchmal genau das Gegenteil von dem bewirken, was man eigentlich wollte.
    So viele Treppen und so wenig Zeit!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test