Diskussion:Schnelle 32Bit-Integer Sinusberechnung

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Fragen und Probleme mit dem Code

Mit dem aktuellen Code ergeben sich einige Probleme:

  • Je nach Plattform ist int lediglich 16 Bits breit: Der C-Standard garantiert mindestens 16 Bits für int, mehr jedoch nicht. Lösund wäre die Verwendung von stdin.h von C99 und Vermeidung von Überläufen wie sie momentan auftreten.
  • Falls die Architektur nicht über Divisionsbefehle verfügt (Beispiel: AVR), ist die Berechnung keineswegs als "schnell" zu bezeichnen.
  • Die angegebene Genauigkeit von 0.1% entspricht 10 Binärstellen. Es stellt sich die Frage, warum dafür überhaupt 32-Bit Arithmetik verwendet wird.
  • Die Eingabe erfolgt in Grad, es sind also nur 91 Eingaben (0°...90°) möglich falls man sich auf den ersten Quadranten beschränkt. Dies erfordert eine Rundung der Eingabe auf ganze Grade, was einen Rundungsfehler von bis zu pi/360 bedingt. Dies entspricht einer Genauigkeit von nur 7 Binärstellen, was schneller, einfacher und kürzer durch eine 91 Byte große Lookup-Table bewerkstelligt werden kann.

--Gjlayde (Diskussion) 11:15, 28. Okt. 2013 (CET)

Optimierung

Wenn man 16 Stützstellen nimmt, kann die /10 Division durch eine Schiebeoperation optimiert werden.

Es verbleiben aber immer noch Divisionen bzw. Modulo durch 360 und 90. --Gjlayde (Diskussion) 13:59, 28. Okt. 2013 (CET)
Ginge mit INT und Abziehen direkter und einfacher. 87.166.187.53 21:05, 28. Okt. 2013 (CET)
Wenn nicht rad, dann könnte man anstatt in einer 360° Welt auch gleich in einer 256 oder 1024 Einheiten-Welt arbeiten. 07:02, 29. Okt. 2013 (CET)


Kommentar des Autors

Zugegeben, ich arbeite nur noch mit 32Bit-Arm Controllern und habe nicht über eine 8Bit Optimierung oder die Reduktion von Divisionen nachgedacht. Da gibt es sicher noch ein paar Optimierungsmöglichkeiten. Wichtig war mir, das Verständnis für einen so einfachen Algorithmus mit nur 188Byte code (CortexM4) zu erzeugen.

Vorschlag: Optimiert das doch für 8Bit und mit Bitschift-Divisionen und wir bieten das als zusätzlichen Download mit an.

MPetschke