Forum: Compiler & IDEs Vorberechnen von Konstanten im Code, wie?


von Tobias Z (Gast)


Lesenswert?

Hallo allerseits,

mein Programm soll parametrisierbar sein und so berechne ich im Code 
einige Konstanten, was aber nicht so wie gewünscht funktioniert, siehe 
unten.
Wie kann ich solche Konstanten im Code beim Compilieren berechnen lassen 
und zwar mit der Genauigkeit des Computers, ohne über die Datentypen des 
Compilers gehen zu müssen? Da ich Werte im Bereich 10^-6 bis 10^6 in den 
Rechnungen drin hab', wär' das schon praktisch.

Danke vielmals!!  Tobias

______________________________

#define a 300

#define b 500

#define c (a*b) //könnte ich hier irgendwie schon rechnen lassen?

const unsigned long i=a*b; //i wird 18928 dezimal --> falsch
const unsigned long l=c; //dito (klar..)
const unsigned long k=((unsigned long)a*(unsigned long)b); //so stimmts

von OliverSo (Gast)


Lesenswert?

>über die Datentypen des Compilers gehen zu müssen?

Da der Compiler nunmal für dich rechnet (auch zur Compilezeit), wirst du 
dessen Datentype schon nutzen müssen. Die "Optimierung" durch 
Vorberechnung muß schließlich zum genau gleichen Ergenniss führen, wie 
eine Berechnung zur Laufzeit.

Konstanten lassen sich durch anhängen von "L" bzw "LL" als long oder 
longlong spezifizieren.
1
#define a 300L
Dann klappts auch mit der Berechnung.


Oliver

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Eine "Konstante" wie

#define a 300

ist per se ein int. Damit ist eine Multiplikation zweier solcher 
Konstanten eine Multiplikation zweier ints, mit int -Ergebnis. Und 
das geht, wie Du festgestellt hast, auf einem 16-Bit-System in die Hose.

Durch Hintanstellen des Suffixes L kannst Du aber eine Konstante auch 
als long definieren:


#define a 300L

oder auch als unsigned long

#define a 300UL

Das sollte bei Deinem Problem helfen.

von OliverSo (Gast)


Lesenswert?

Nachtrag: für unsigned nimmst du dann "UL".

Oliver

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.