PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Winkelfunktionen



XBert
15.12.2009, 00:28
Hi Leute,
In letzter Zeit habe ich mich ein wenig mit Winkelfunktionen u.Ä beschäftigt.
Doch leider habe ich nicht herausfinden können wie diese auf einem AVR brechnet werden. (Tabelle oder on-the-fly)

Mein Programm benötigt die Werte nur mit 16 Bit Genauigkeit aber beim AVR sind sowohl float als auch double 32 Bit lang.
Die Frage ist letzten Endes wie es am besten zu lösen ist wenn das Programm möglichst schnell laufen sollte.
Wäre es nicht am schnellsten das ganze wie hier: http://www.mikrocontroller.net/articles/AVR_Arithmetik/Sinus_und_Cosinus_(Lineare_Interpolation) zu lösen oder doch etwa ganz anders??
Und welche Rechenweise ist auf dem µC besser/schneller : Fließkommaberechnungen oder Integerrechnungen??

Felix G
15.12.2009, 08:27
Und welche Rechenweise ist auf dem µC besser/schneller : Fließkommaberechnungen oder Integerrechnungen??Ganz klar Integer (Festkomma), denn ein AVR hat keine FPU und ist daher extrem langsam bei floats.

Der Ansatz aus dem mikrocontroler.net Artikel erscheint mir sinnvoll, wenn man einen schnellen sinus benötigt. Eine andere Möglichkeit wäre den Sinus durch ein Polynom zu approximieren, denn das kann man auch noch halbwegs schnell berechnen (aber so schnell wie mit einer LUT, bzw. LUT + Interpolation wirds nicht).

XBert
15.12.2009, 19:52
Danke, dann werd ich das ganze in den nächsten Tagen mal ausprobieren!

LG XBert

Besserwessi
15.12.2009, 21:07
So klar ist es nicht, das ein Loockup Tabbelle schneller ist als das Polynom. Das hängt etwas von der funktion ab, und der erforderlichen Genauigkeit.


So viel langsamer müßen Fließkommazahlen auch nicht sein, vor allem wenn man nicht das erste Bit noch sparen will, weil es immer 1 sein muß. Bei Multiplication und Division ist der Unterschied gar nicht so groß. Bei Addition dagegen schon merklich. Wenn man die Wahl hat, können 32 Bit Floats schneller sein als 64 Bit Integers.