Zitat Zitat von ragnar
@SprinterSB:
Ich nehme an, doubles und floates werden vom AVR-GCC entsprechend emuliert, oder ? Trotzdem danke für den Tip mit dem Nachinterpolieren. Die Möglichkeit hatte ich schon wieder ganz vergessen.
Klaro, ne FPU gibt's ja nicht bei AVR.

Zitat Zitat von ragnar
Nur: wie kann ich sin aus e herleiten ?
Und vor allem: wie kann ich den arctan (also tan^(-1)) vernünftig in eine Tabelle quetschen ?
Was willst du mit exp(). Über C zu rechnen macht dir nur Overhead. Du weisst doch, daß deine Werte in R liegen. Für eine Multiplikation in C brauchst du immerhin 3 Multiplikationen über R.

Für atan() hast du

atan(x) = Pi/2 - atan(1/x)
atan(x) = -atan(-x)

was schon mal das Intervall auf [0,1] begrenzt. Falls du über die Taylorreihe um 0 von atan() gehen willst ist das schlecht, denn am Rande des Konvergenzradius ist die Konvergenz echt mies.
Evtl hilft das Additionstheorem
atan x + atan y = atan ((x+y)/(1-xy)), |x| << 1, |y| << 1
also
atan x = 1/2 * atan (2x / (1-x^2)) mit |x| << 1
oder so ähnlich
Wenn man das wiederholt anwendet und den atan() um 0 linearisiert, also atan x = x nimmt, bekommt man den atan() ebenfalls raus. Allerdings muss man Wurzeln ziehen, wenn ich mich recht erinnere. Ne Wurzel zu ziehen wiederum ist nicht viel mehr Aufwand als ein paar Divisionen.

Noch ein Tipp:
Wenn du 2 Zahlen multipliziertst, etwa 2 16-bit-Werte in 8-bit-Darstellung, dann musst du auswerten
P = (B*a1+a0)*(B*b1+b0)
Dabei ist B die Basis (hier 2^8) und a1, a0, b1, b0 sind die Ziffern zur Basis B.
Das auszumultiplizieren:
P = B^2*a1*b1 + B*(a1*b0 + a0*b1) + a0*b0
= B^2*c2 + B*c1 + c0
So gerechnet, kostet das 4 Multiplikationen, und die sind teuer. (Multiplikation mit der Basis ist trivial).
Wenn du hinschreibst
ck = (a1+a0)*(b1+b0) = a1*b1 + a1*b0 + a0*b1 + a0*b0
c2 = a1*b1
c0 = a0*b0
hast du
P = B^2*c2 + B*(ck-c2-c0) + c0,
was dich nur noch Multiplikationen kostet. Die Idee -- allerdings für große Zahlen mit mehreren hundert Stellen -- stammt von Karatsuba. Allerdings musst du etwas Acht geben, weil die Koeffizienten noch nicht auf 0 <= B < ci normiert sind.