Wie gut funktioniert Konstantenberechnung im Voraus?

Gast #1610462
Tag miteinander

ich habe mir neulich eine Fixpunktarithmetik zusammengebastelt und 
definiere dazu eine Menge Konstanten, die bereits beim Compilieren 
berechnet werden sollen.

Das Ganze funktioniert soweit einwandfrei, ich frage mich halt nur, ob 
wirklich alles vom Compiler/Präprozessor berechnet wird, oder ob doch 
etwas durchsickert und zur Laufzeit unnötig Zeit verschwendet.

Vielfach verschachtelte Funktionen und floats (Genauigkeit = Genauigkeit 
Zielsystem?) dürften ja wohl kein Problem sein, aber wie sieht es zum 
Beispiel hiermit aus?
1
#define FPA_CONST(a)   ((s32)((a)* FPA_ONE + ((a)>=0 ? 0.5 : -0.5) ))

a wird als float übergeben. Das sind zwar immer noch alles Konstanten, 
aber nun nicht mehr allzu trivial verknüpft.
Kriegt der Compiler auch sowas noch vor der Laufzeit hin?
Gast #1610466
Also mein Compiler kriegt das hin.

Ehrlich: Frag deinen Compiler, lass dir ein Assembler-Listing ausgeben 
und schau nach. Die Optimierungen des Compilers sind kaum vorhersehbar 
:->
#1610467
Moderne Compiler - u.a. auch der GCC - "trivialisieren" alle 
Berechnungen. Inwieweit sie das Ganze dann anschließend optimieren, das 
liegt im Wesentlichen in der Hand des Programm-Schreibers; er besitzt 
die Möglichkeit, entsprechende Compiler-Optionen anzugeben. Für den GCC 
gibt es ein wunderschönes Handbuch, welches alle Compileroptionen 
ausführlich beschreibt.

Bernhard

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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]
  • [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.