Problem mit abgeschnittenen Nachkommastellen bei einer Berechnung (CCS C Compiler)

Gast #3049666
Lesenswert?

Hallo, habe ein kleines Problem bei einer Berechnung. Ich verwende den 
CCS C Compiler zur Programmierung eines PIC µC. Das Problem betrifft 
folgende Formel:
1
dutyp = 30+(70/(max_temp-min_temp))*(temp-min_temp);

Die einzelnen Variablen folgendermaßen deklariert:
1
signed int16 temp=0;                         // Temperature in °C
2
int8 min_temp;                               // Min.-Temp
3
int8 max_temp;                               // Max.-Temp
4
signed int16 dutyp=0;                        // Percentage of Duty Cycle

Bei folgenden Werten:
min_temp = 20
max_temp = 50
temp = 47

Erhalte ich als Ergebnis 84. Richtig wäre 93.
Das Problem ist, dass bei der Division die Nachkommastellen wegfallen.

Habe schon einiges versucht mit der Variablendeklaration usw. Leider 
ohne Erfolg.

Wenn ich statt der Division "70/(max_temp-min_temp)" den dezimal Wert 
"2.3333" eingebe, dann stimmt das Ergebnis. Aber das bringt mich 
natürlich nicht weiter.

Wär klasse, wenn mir da jemand weiterhelfen könnte! :-)
#3049708
Lesenswert?

> Wär klasse, wenn mir da jemand weiterhelfen könnte! :-)

Ja, ist völlig normal. Integer dividiert durch Integer ergibt nunmal 
wieder einen Integer.

Formel etwas umstellen, und die Sache ist erledigt.
Anstelle von a/b*c kannst du ja auch (a*c)/b rechnen um mathematisch 
dasselbe Ergebnis zu erhalten.

Als Faustregel kannst du dir merken: Du willst Divisionen soweit es geht 
nach "Rechts" verschieben, also erst so spät wie möglich machen. Aber 
Achtung: darauf achten, dass du zwischendurch dann in keine Overflows 
reinläufst.

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