Forum: Mikrocontroller und Digitale Elektronik Wie gut funktioniert Konstantenberechnung im Voraus?


von Rumkugel (Gast)


Lesenswert?

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?

von Sven P. (Gast)


Lesenswert?

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

von Bernhard R. (barnyhh)


Lesenswert?

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

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.