SystemC - Ganze Zahlen aus Feskommazahl ermitteln

Gast #5906495
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
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
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

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.