Vorberechnen von Konstanten im Code, wie?

Gast #797462
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
Gast #797480
>ü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
Persönliche Seite #797481
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.