Forum: FPGA, VHDL & Co. SystemC - Ganze Zahlen aus Feskommazahl ermitteln


von Bruchrechner (Gast)


Lesenswert?

Guten Abend zusammen,
wirklich viel Erfahrung mit SystemC oder C++ habe ich leider nicht.
Ich suche aktuell ein eleganteres Konstrukt wie ich aus einer 
Festkommazahl die ganzen Zahlen ermitteln kann. Aktuell benutze ich 
folgendes:
1
ap_fixed<32,22> tempc = 12.421875;
2
output4 = static_cast <ap_fixed <32,22> > (static_cast <int> (tempc));
Geht das auch eleganter?
Danke im Voraus!

von S. R. (svenska)


Lesenswert?

Passend nach rechts shiften?

von dfIas (Gast)


Lesenswert?

Und wie ist Eleganz definiert?
Ganz ehrlich, als Programmierer der ersten Stunde sind mir diese 
modernen Spacherweiterungen eher zuwider, als dass sie in irgendeiner 
Weise den ganzen Sermon leserlicher machen.
Ich selbst würde zur klassischen Programmierung zurückfinden und die 
Festpunktzahl als gewöhnlichen 32-Bit-Integer definieren - mit 10 
Nachkommastellen im Sinn (Format "22.10"). Der Vorkommaanteil ergibt 
sich dann, wie bereits von S. R. erwähnt, durch Schieben um diese 10 
Positionen nach rechts. Mit der Zuweisung im Gleitkommaformat 
entsprechend:
1
tempc = (int)(12.421875 * 1024);
2
output4 = tempc / 1024;
Die 1024 könnte man als #define festlegen oder man definiert sich Makros 
zur Umrechnung:
1
tempc = DBL2FIX (12.421875);
2
output4 = FIX2INT (tempc);
Das wäre zumindest mein Verständnis von Eleganz.

von daniel__m (Gast)


Lesenswert?

Hi,

keine Ahnung wie in SystemC der Type ap_fixed aufgebaut ist, in Xilinx 
HLS ist das eine Klasse, welche die Methode to_int() hat.

von daniel__m (Gast)


Lesenswert?

S. R. schrieb:
> Passend nach rechts shiften?

Dann würde sich sicherlich der repräsentierte Wert ändern, z.B.
1
16.00 >> 2 = 4.000

von daniel__m (Gast)


Lesenswert?

dfIas schrieb:
> Das wäre zumindest mein Verständnis von Eleganz.

Ich habe früher auch so gearbeitet, bin davon aber weggekommen. Macros 
sind nicht typsicher und "5 im Sinn" bei mir zu Fehleranfällig. Irgendwo 
(z.B. beim Refactoring) wird ürgendwas übersehen.

Daher nutze ich lieber die ap_(u)fixed Klassen (in Xilinx HLS) und kann 
diese wie Floats einfach addieren, multiplizieren, etc und brauche nicht 
händisch die Wertigkeit korrigieren. Natürlich muss man Wissen, was man 
beschreibt, aber es entlastet.

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.