Forum: Mikrocontroller und Digitale Elektronik Warum ist meinen Berechnung falsch


von Resi (Gast)


Lesenswert?

Hallo zuammen

Ich berechene was leider bekomme ich nicht immer das gleiche Resulatet


WORD      intTm1;
unsigned long int intTm2;
unsigned long int intTm3;

intTm1 = ADC;
intTm2 = 73720;         //x10 damit genauer gerundet wird
intTm3 = intTm2/1023;
intTm2 = intTm3*intTm1;
intTm3 = intTm2/10;      //Div 10 Damit genauer gerundet wird
intTm1 = intTm3;
intADCV = 65536-intTm1;  //Wert für Timer1 Compare Match A


Das Problem ist, wenn ich schreibe:

intTm2 = 73720;
dann funktioniert die Sache.

Wenn ich schreibe:

intTm2 = 10*7372;
funktioniert die Sache nicht.

Es muss irgenwie was mit den Variablen zu tun habe?
Finde aber den Fehler nicht.

Gruss

Resi

von Philipp B. (philipp_burch)


Lesenswert?

Wenn nicht anders angegeben, dann rechnet der Compiler immer mit Int, in 
deinem Fall wohl mit 16Bit. Bei 10 * 7372 wird zuerst 7372 mit 10 
multipliziert und dann erst nach long int gecastet. Und in einen 
normalen int kriegste 73720 halt beim besten Willen nicht rein. So 
müsste es aber gehn:
1
intTm2 = 10 * (long int)7372

von Resi (Gast)


Lesenswert?

Danke Philipp

Da hätte ich lange suche können, da wäre ich nie drauf gekommen


Gruss

Resi

von Jörg X. (Gast)


Lesenswert?

<besserwisser>
1
intTm2 = 10 * 7372L
2
//bzw.
3
intTm2 = 10 * 7372l
tuts auch
</besserwisser>

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.