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
>ü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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.