AVR-gcc Multiplikation falsches Ergebnis

#6685220
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?
Angehängte Dateien:
Moderator Persönliche Seite #6685250
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.
Beitrag #7410352 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.