mikrocontroller.net

Forum: FPGA, VHDL & Co. Festkomma - Arithmetik


Autor: Chris R. (mrgreen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Prinzip, das hinter der Festkomma-Arithmetik steckt, ist mir glaub 
ich klar; nach dem Komma finden sich von links nach rechts die 
Bruchteile 1/2, 1/4, 1/8....
Wie ich es implementieren soll leider nicht so ganz.

Eine Division / Multiplikation mit einer Zweier-potenz ist trivial.
Ich muss aber leider mit dem Wert 60 multiplizieren...

Wie stell ich das an? Ich würde intuitiv zuerst den Ganzzahl-Anteil 
multiplizieren, und dann die Nachkommastellen*60 drauf addieren.

Aber wie muss ich die Nachkommastellen anschauen? Einfach aus dem Vektor 
ausschneiden und dann mal 60 nehmen ist ja logischerweise Unsinn.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da 60 selbst eine Ganzzahl ist [1], geht das einfach: Den Wert der 
Festkommazahl als Ganzzahl interpretieren und mit der Ganzzahl 60 
multiplizieren [2], und das Ergebnis als Festkommazahl interpretieren.

Das funzt, weil die Festkommadarstellung A der Zahl A*2^(-n) entspricht 
(bei n Nachkommastellen in der Darstellung). Die Ganzzahldarstellung 
B=60 entspricht auch der Zahl B=60, und dann ist
(A*2^(-n)) * B = (A*B) * 2^(-n)

[1] Schwieriger wirds wenn beide Faktoren Festkommazahlen sind, 
insbesondere wenn du dabei weder Genauigkeit noch Wertebereich verlieren 
willst. Wenn du darüber stolperst ist das ne Fragestellung für sich 
wert.

[2] Geht einfach aber langsam, wenn es einen Befehl für 
Ganzzahlmultiplikation gibt. Ansonsten ist
60*x = (64 - 4)*x = 64*x - 4*x = (x << 6) - (x << 2)
-> Zweimal schieben, eine Subtraktion

Autor: Chris R. (mrgreen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cool, danke!!
Auf sowas muss man erstmal kommen!

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal Rechnen in VHDL -> fixed_pkg an. Das nimmt einem 
solche Überlegungen nicht ganz ab, man kann sich aber trotzdem einiges 
an Handarbeit sparen.

Autor: Chris R. (mrgreen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß, aber ist das Package denn "stable"?

Und ich weiß nicht bzw. bezweifle, dass ich es auch in der Uni nutzen 
kann / darf...

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
VHDL-2006 ist stable, ist aber noch nicht vom IEEE abgesegnet. Die 
Pakete lassen sich mit den meisten Tools nur nach ein paar Anpassungen 
kompilieren.

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.