Problem mit CodeVision-Mathe

Gast #68728
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;
Gast #68730
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

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