Forum: Compiler & IDEs Fixed Point Arithmetik


von Steffie M. (nerdig)


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.

von Simon K. (simon) Benutzerseite


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.

von Detlef _. (detlef_a)


Lesenswert?

Mit Schieben geht das auch:

http://www.hackersdelight.org/divcMore.pdf


Math rulez!
Cheers
Detlef

von der mechatroniker (Gast)


Lesenswert?

> Mit Schieben geht das auch:

Ach, echt? Ich dachte, Simon hätte seine Umformung derart, dass im 
Nenner nur noch Zweierpotenzen stehen, nur zum Spaß gemacht.

von Steffie M. (nerdig)


Lesenswert?

Vielen Dank, hat mir sehr geholfen

von Klaus W. (mfgkw)


Lesenswert?

Wenn 1.1% Abweichung erlaubt sind, geht auch 11*Winkel+500

von avr (Gast)


Lesenswert?

@Detlef_a

Dein PDF sieht interesant aus. Was steht auf den Seiten
0-201 und 202ff; also was ist das für ein Buch/Script?

Ist der Rest empfehlenswert?

avr

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.