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
Wulf D. schrieb: > Ergebnis wird in > einer uint32 abgelegt Die Rechnung wird als uint16 aufgeführt.
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
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.