PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rechentrick



scales
01.11.2007, 18:09
wenn ich drei Register hab, die wert1, wert2 und wert3 heisen und folgendes Verhältnis haben:
wert1*(wert2/255) = wert3

wie rechne ich dann am einfachsten wert3 aus?
wenn ich erst wert2 durch 255 teile, dann kommt ne kommazahl raus und wenn ich erst wert1 mal wert2 nehme, dann kommt ne zahl größer 255 raus.

Wie löst man das am besten?

SprinterSB
01.11.2007, 19:08
x durch 255 teilen ist recht genau



x/255 ~ (x + (x << 8)) >> 16 = x / 255.004


wobei << bzw >> shift nach links bzw rechts um n bits ist

um 16 bits zwischendurch wirst du imho nicht rumkommen, aber 8*8=16 ist ja kein drama...

Felix G
01.11.2007, 22:05
Na ob das Shiften an der Stelle so optimal ist?

wenn ich mich recht erinnere haben die AVRs keine Barrel-Shifter, das bedeutet daß 8 Takte für den Linksshift und 16 Takte für den Rechtsshift benötigt werden, was meiner Ansicht nach ziemlich viel für eine simple Division ist.

Besserwessi
01.11.2007, 22:19
Das Shiften um 8 bzw. 16 ist gerade das verschieben um ganze Bytes, also nur ein umsortieren der Register.
Stellt sich nur die Frage ob wirklich /255 gesucht ist, und nicht etwa /256 ?