Fixed Point Arithmetik

#1486089
Lesenswert?

Hallo

ich habe eine Formel zur Berechnung der Schritte eines Servos bei 
Eingabe eines Winkels:

Schritte = ((100*Winkel)/9)+500

Wir wollen aber diese Formel in einer Fixed Point Darstellung bekommen!

Hat einer von euch eine Idee, wie man sowas machen könnte? D.h. anstatt 
der 9 im Nenner den shift Operator verwenden?

Vielen Dank im voraus.
Persönliche Seite #1486111
Lesenswert?

Faktor rausziehen
Faktor Erweitern mit zum Beispiel 256/9. (Irgendwas mit 2^n/9 an dieser 
Stelle ist sinnvoll. Wobei vielfache von n mit 8 am allereinfachsten 
dividiert werden können).
Vereinfachen und Zähler runden (Sodass man einen Integer bekommt).
Umstellen, sodass Division als letztes ausgeführt wird.

Jetzt hast du keine wirkliche Division mehr. Das Teilen durch 256 wird 
durch einfaches Weglassen des untersten Bytes gemacht.

Beachte aber, dass du durch die Rundung von 100*256/9 einen Fehler 
reinbekommst. Je nach Größe der Variable Winkel und maximal erlaubtem 
Fehler musst du mit 65536/9 erweitern.
Beachte auch, dass Überläufe bei der Multiplikation im Zähler entstehen 
können. Also auch hier wieder auf deinen Wertebereich achten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren