Hallo,
nachdem ich den Artikel zur Festkommaarithmetik gelesen habe konnte ich
eine Formel wie folgt umstellen:
Original:
Umgestellt:
1 | 1: y = (x*3) >> 3;
|
2 |
|
3 | 2: y = (x*410) >> 10;
|
4 |
|
5 | 3: y = (x*3277) >> 13;
|
Erstmal, sind diese Umstellungen korrekt? Sollte doch passen oder?
Problematischer sind aber die Datentypen.
x und y sind unsigned 16 Bit Variablen.
Formel 1 liefert fast den korrekten Wert, der Faktor 3 müsste aber
eigentlich 3.2 heißen. Bei so niedrigen Zahlen ist das natürlich ne
relativ hohe Abweichung.
Genauer sollten die Formeln 2 und 3 sein. Da ist relativ gesehen weniger
Abweichung im Spiel.
Allerdings kommt was komplett falsches raus, vermutlich weil die
Multiplikation in der Klammer zu einem Überlauf führt.
Kann mir jemand sagen wie und wo ich Typecasts platzieren müsste um das
korrekte Ergebnis anschließend in y (16 Bit) zu platzieren ohne aber
zuviel zu casten? Steh da bisl aufn Schlauch...
Viele Grüße,
Karlo