Forum: Mikrocontroller und Digitale Elektronik Problem mit CodeVision-Mathe


von Aleksej (Gast)


Lesenswert?

Hallo!

Ich bin am Verzweifeln, ist ja irgendjemand in der Lage mir klar zu
machen, wieso für CodeVision diese 2 Varianten nicht gleichwertig
sind?

1) summa = (Temp_Stop-temperature)*(KP+KI);

2) summa = (Temp_Stop-temperature);
   summa = summa*(KP+KI);

bei dem ersten kriege ich 0, bei dem zweiten - was es sein soll.

summa - unsigned int; temperature - unsigned char;
Temp_Stop=100>temperature;
KP=32, KI=32;

von Harald (Gast)


Lesenswert?

Wird summa nicht irgendwie overflowed? Was anderes sehe ich nicht...

von Ralf (Gast)


Lesenswert?

Hi,

kann es sein, dass Temp_Stop/KP/KI Literale oder unsigned char
Konstanten sind? Dann gibt es denke ich einen Unterschied:
Bei der ersten Variante würde der Compiler dann evtl. die komplette
Rechnung mit unsigned char durchführen und somit kommt ein falsches
Ergebnis raus, da überläufe auftreten.
Bei der zweiten Variante lässt sich der erste Teil der Rechnung
unsigned char durchführen (solange 0<=temperature<=100) dann casted der
Compiler automatisch auf unsigned int. Die Zweite Rechnung führt er
dann unsigned int durch und es kommt das richtige raus.
Bei solchen Rechnungen mit Variablen unterschiedlicher Typen ist es
immer sehr wichtig richtig zu casten! Damit lassen sich viele Fehler
vermeiden.

Viele Grüße,

Ralf

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.