Wie der Titel bereits sagt, kämpfe ich derzeit mit sehr großen
Integerzahlen im AVR. Hierbei werden zwei variable, vierstellige Zahlen
geteilt und anschließend mit einer weiteren konstanten, vierstelligen
Zahl multipliziert.
Einen Überlauf erhalte ich bei folgendem Ausdruck (der mit 32bit kein
Problem darstellen würde):
1 | (unsigned int) 1234*5678/4711
|
1 | Warnung: Ganzzahlüberlauf in Ausdruck
|
Eine andere Sortierung würde auf diesem Weg natürlich den Overflow
vermeiden, aber wegen Rundung zu einer 0 führen:
1 | (unsigned int) 1234/4711*5678
|
Also sind beide Variante keine Lösung.
Der Faktor 5678 ist hierbei die konstante Zahl, die beiden anderen
können variieren. Die 1234 ist stets vierstellig, während die Zahl im
Nenner (hier 4711) zwischen 3 und 5 stellig variiert.
Prinzip: E = (v1*k)/v2
Gibt es eine geschickte Methode solch große Zahlen im AVR zu berechnen?