Forum: Mikrocontroller und Digitale Elektronik AVR-gcc Multiplikation falsches Ergebnis


von Wulf D. (holler)


Angehängte Dateien:

Lesenswert?

Irgendwie komme ich nicht drauf: bei der Multiplikation von einer uint16 
und einer Konstanten stimmt häuftig das Ergebnis nicht. Ergebnis wird in 
einer uint32 abgelegt. Die Konstante ist 91, der Multiplikator schwankt 
im Bereich von ca 500 bis max 2000.
Eigentlich trivial, aber irgendwie habe ich ein Brett vorm Kopf.
Die "volatile" Schlüsselwörter und rtcopy habe ich nur hinzugefügt, 
damit man im Debugger was sieht. Wird sonst alles wegoptimiert.
Ist ein Screenshot aus Microchip Studio 7 auf einem Attiny.
Das Ergebnis ist im Fehlerfall ein niedriger Hunderter-Wert.
Was geht hier schief?

: Gesperrt durch Moderator
von MaWin (Gast)


Lesenswert?

Wulf D. schrieb:
> Ergebnis wird in
> einer uint32 abgelegt

Die Rechnung wird als uint16 aufgeführt.

von Wulf D. (holler)


Lesenswert?

Obwohl der Ergebnisvariable als uint32 deklariert ist?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Wulf D. schrieb:
> Obwohl der Ergebnisvariable als uint32 deklariert ist?

Der Typ der Ergebnisvariablen ist kein Kriterium für die Genauigkeit der 
Berechnung des Ergebnisses rechts vom Gleichheitszeichen.

Tipp: Integer Promotion

Wenn Du möchtest, dass die Formel rechts vom Gleichheitszeichen mit der 
Genauigkeit von uint32_t gerechnet wird, dann gib mindestens einen Teil 
in der Formel auch in dieser Genauigkeit an - z.B. durch einen Cast. Du 
kannst auch 91L schreiben, um das zu erreichen.

: Bearbeitet durch Moderator
von Wulf D. (holler)


Lesenswert?

Vielen Dank, hat funktioniert!
Das Ergebnis stimmt jetzt auch bei größeren Eingangswerten.

Beitrag #7410352 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.