Forum: Mikrocontroller und Digitale Elektronik alternative zu pow()?


von Cheater (Gast)


Lesenswert?

Hallo Leute,

ich muss/möchte mit meinem 8-Bit Atmel pow() nutzen. Aber die Funktion 
ist natürlich sau langsam, ca 7000 Zyklen. Gibt es irgendwie eine 
schnellere Alternative, die mir trotzdem bis auf zwei Nachkommastellen 
genau rechnet?

Danke
Gruß Stef

von Daniel F. (df311)


Lesenswert?

welche datentypen?

von Karl H. (kbuchegg)


Lesenswert?

Das kommt drauf an.
Wie sieht denn dein Exponent aus?

pow( x, 2 )  ist ja nichts anderes als x*x
und pow( x, 3)   ist nichts anderes als x*x*x

hast du einen ganzzahligen Exponenten, dann kannst du einfach mal die 
entsprechenden Multiplikationen ausrollen.

ein sqrt( x ) würde ich aus dem Bauch heraus auch mal als schneller 
einschätzen als ein pow( x, 0.5 )

von Marco M. (marco_m)


Lesenswert?

Du musst schon genauere Angaben machen, sonst können wir die ja nix 
passendes vorschlagen. Welchen Wertebereich und welche Genauigkeit haben 
deine Eingangsparameter x,y für pow(x,y)? Und was ist dein 
Anwendungsfall? Sehr oft stellt sich bei Performancesachen heraus, dass 
das Problem einfach nur ungeschickt angegangen wurde.

von Cheater (Gast)


Lesenswert?

ui, danke für die schnellen Antworten

Es muss die Formel umgesetzt werden:
y = k * x^exp

Werte im Intervall [von; bis]
k = 16.37 (double)
exp = 0.39 (doube)
x = [0; 249] (eignetlich int, aber muss wohl auf double umgewandelt 
werden)

Genauigkeit mindestens 2 Nachkommastellen

Die Formel muss etwa 1000 mal pro Sekunde gerechnet werden, was den 
Prozessor (16MHz) schon gut auslastet

Marco M. schrieb:
> Du musst schon genauere Angaben machen, sonst können wir die ja nix
> passendes vorschlagen. Welchen Wertebereich und welche Genauigkeit haben
> deine Eingangsparameter x,y für pow(x,y)? Und was ist dein
> Anwendungsfall? Sehr oft stellt sich bei Performancesachen heraus, dass
> das Problem einfach nur ungeschickt angegangen wurde.

Aber ich liebe dieses Forum so sehr, weil mir so oft schon Ideen und 
Lösungen eingefallen sind, NACHDEM ich ne Frage formuliert und gepostet 
habe :-)
Mir ist gerade klar geworden, das k und exp ja zur Laufzeit konstant 
sind, deshalb kann ich ja eigentlich x^exp für alle 250 Möglichkeiten im 
Voraus berechnen und muss "nur" noch *k rechnen.

Und diese Multiplikation kann man sicher auf "Integer*Interer" umformen 
und trotzdem meine gewünschte Genauigkeit zu behalten.

von Cheater (Gast)


Lesenswert?

ich bin blöd, ich kann ja ALLES im Voraus berechnen und abspeichern... 
man bin ich doof

von F. F. (foldi)


Lesenswert?

Cheater schrieb:
> ich bin blöd, ich kann ja ALLES im Voraus berechnen und abspeichern...
> man bin ich doof

In irgendeinem Buch las ich, dass es an einer Uni in Amerika einen Teddy 
gab, dem die Studenten zuerst ihr Problem vortragen mussten, bevor sie 
damit zum Prof durften.
Wenn man sich sein Problem vergegenwärtigt, dann findet man oft selbst 
die Lösung.

von Cheater (Gast)


Lesenswert?

mir geht es fast immer so wenn ich hier ein Problem poste^^

von Marco M. (marco_m)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.