www.mikrocontroller.net

Forum: Compiler & IDEs Fixed Point Arithmetik


Autor: Steffie Meier (nerdig)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Schieben geht das auch:

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


Math rulez!
Cheers
Detlef

Autor: der mechatroniker (Gast)
Datum:

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

Autor: Steffie Meier (nerdig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, hat mir sehr geholfen

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn 1.1% Abweichung erlaubt sind, geht auch 11*Winkel+500

Autor: avr (Gast)
Datum:

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

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.