Warum ist meinen Berechnung falsch

Gast #515195
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
#515198
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren