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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.