kurze Frage zu typecasts

Gast #2590660
Lesenswert?

Hallo,

nachdem ich den Artikel zur Festkommaarithmetik gelesen habe konnte ich 
eine Formel wie folgt umstellen:

Original:
1
y = x / 2.5

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
Gast #2590707
Lesenswert?

Nein, muss es nicht.

Es soll eher ne kleine Übung zur Festkommaarithmetik sein weil ich sowas 
noch nie gemacht habe.
Und eleganter find ichs auch :-)
Bin grad dabei verschiedene Funktionen unterschiedlich zu implementieren 
(zB ItoA), einfach um ein Gefühl für die Möglichkeiten und Unterschiede 
zu bekommen.

Und gelernt hab ich bis jetzt in diesem Fall: je größer die 2er Potenz 
die benutzt wird desto genauer, nur brauchts irgendwann ne größere 
Variable...

Hat jemand noch nen Tipp zu wohlplatzierten Casts?
Gast #2590717
Lesenswert?

Ja, aber der Wikiartikel treibt das ganze noch weiter und ersetzt 
Divisionen durch Bit-Shifting. Das fand ich recht elegant und wollts 
nachmachen.

Außerdem würd ich danach gern Messen was performanter ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren