Forum: FPGA, VHDL & Co. Festkomma - Arithmetik


von Chris R. (mrgreen)


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.

von Andreas K. (a-k)


Lesenswert?


von Morin (Gast)


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

von Chris R. (mrgreen)


Lesenswert?

Cool, danke!!
Auf sowas muss man erstmal kommen!

von Andreas S. (andreas) (Admin) Benutzerseite


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.

von Chris R. (mrgreen)


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...

von Andreas S. (andreas) (Admin) Benutzerseite


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.

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.