Hallo, ich möcht im DSP dividieren. Das brauch aber mehrere Rechenschritte, daher wollt ich fragen ob und wie ich den Kehrwert in C programmieren kann? Philipp
Ich glaube ich versteh dich nicht ganz. ich würde blauäugig sagen: y = 1/x;
Ok, vielleich blöd gefragt. Ich möchte die Division vermeiden und mochte durch z.B. ein Bitshifting oder Änderung der Bitreinfolge den Kehrwert einer Zahl bilden, wenn das möglich ist, und dann diese multiplizieren. Erhoffe mir eine Zeitersparnis, durch weniger Rechenoperationen. Philipp
Gast
#1957225
Du könntest alle Kehrwerte in einer Lookup-Tabelle speichern. Anders geht's glaube ich nicht.
Integer, wa? http://www.mikrocontroller.net/attachment/highlight/78593 ;-)) Cheers Detlef
Gast
#1957236
Philipp M. schrieb: > Erhoffe mir eine Zeitersparnis, durch weniger Rechenoperationen. Das klingt wieder nach Optimierungsrennen mit dem Compiler. Aber so als Vorschlag: Statt a / b rechnest du a * (c / d) wobei c / d = 1 / b (zumindest ungefähr) Durch geschickte Wahl von d lässt sich die Division dann durch rechtsschieben ersetzen (Potenz von 2). :-)
Ich denke mal daß die Division (von was eigentlich) im Compiler schon recht optimal umgesetzt worden ist (Speziallösungen siehe die vorherigen Posts) Ich denke daß Du da nicht viel rausholen kannst. Das Bottleneck ist meistens nicht da wo man es vermutet :-) Viel Erfolg beim Suchen.
Udo Schmitt schrieb: > Ich denke mal daß die Division (von was eigentlich) im Compiler schon > recht optimal umgesetzt worden ist Das Problem ist dass sich der Compiler exakt an den C-Standard halten muss, und dadurch in seiner Optimierung eingeschränkt ist. Manche DSPs haben Befehle für Logarithmus/Exponentialfunktion (mit eingeschränkter Genauigkeit), damit lässt sich ein Kehrwert effizient berechnen.
Vielen Dank für die Anregungen. Werd mal ein bisien ausprobieren. Sitz aber grad noch an einem anderem Problem.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.