mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit CodeVision-Mathe


Autor: Aleksej (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird summa nicht irgendwie overflowed? Was anderes sehe ich nicht...

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.