SystemC - Ganze Zahlen aus Feskommazahl ermitteln

Gast #5906495
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!
Gast #5910050
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.
Gast #5910785
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren