kurze Frage zu typecasts

Gast #2590660
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.