mikrocontroller.net

Forum: PC-Programmierung 2 hoch N: Wie in C?


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich trau mich fast gar nicht zu fragen, aber wie heisst der Operator in
C, mit dem man etwas potenzieren kann?
Also 2 hoch n? Wie muss man das schreiben?
Entweder ich bin blind, ich habs in meiner C-Beschreibung nicht
gefunden, oder das gibt es gar nicht.

Stefan

: Gesperrt durch Moderator
Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(1<<n) ist gleich 2^n

Aber wenn du eine andere basis als 2 haben willst musst du: a) eine
lookup tabelle machen (eingeschränkter wertebereich, sehr schnell) b)
eine assembler funktion schreiben/finden oder c) die sqr() funktion
benutzen.

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem sqr() ist natürlich quatsch. heh

Autor: Lupin (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
#include <math.h>
double val2 = pow(x, 4); // x hoch 4

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh mann, bin ich blind. Man dankt.Schöne Feiertage.

Stefan

Autor: coder (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Lupin schrieb:
> Das mit dem sqr() ist natürlich quatsch. heh

Das ist kein Quatsch:
   sqr(x) == pow(x, 0.5)

pow(x, 1.5)
 ==
pow(pow(x, 3), 0.5)
 ==
sqr(pow(x, 3))
 ==
sqr(x*x*x)
Das letzte sollte das schnellste sein.

Wenn man den Exponenten zur Compilierzeit kennt kann man auch speziell 
die berechnung so schreiben, dass diese nur die sqr-function und 
*-operator benutzt.

Möchte man eine konstante Basis (die eine potenz von 2 ist) mit einer 
Variable(Ganzzahl) potenzieren so kann man dies ebenfalls mit dem 
Verschiebeoperator tun:
mul*pow(k, x)
 ==
mul<<(k_exp*x)

k: Potenz von 2
k_exp: exponent e in
k = pow(2, e)

Bsp.:
5*pow(4, x)
 ==
5<<(2*x)


Wenn du C++ verwendest gib es Bibliotheken die speziell optimierte 
Potenzfunktionen mit template-parametern für den konstanten Teil 
bereitstellen. Boost(wo einige Teile auch in C funktionieren) sollte 
soetwas enthalten, wenn ich mich nicht irre.

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
coder schrieb:

> Wenn du C++ verwendest gib es Bibliotheken die speziell optimierte
> Potenzfunktionen mit template-parametern für den konstanten Teil
> bereitstellen. Boost(wo einige Teile auch in C funktionieren) sollte
> soetwas enthalten, wenn ich mich nicht irre.

Die spezielle Bibliothek heisst stdlibc++ ;-)

Ist der Exponent constexpr wird alles zur Compilezeit ausgerechnet! Da 
steht dann im Code nur noch die entsprechende Konstante.

Autor: Nick Sput (c0re)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Wenn er in den letzten 11 Jahren!!!!!!!!!!! keine Lösung gefunden hat, 
ist ihm nicht mehr zu helfen.

Autor: T.roll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nick S. schrieb:
> keine Lösung gefunden hat,
> ist ihm nicht mehr zu helfen.

Ist doch egal. Es gab noch eine sinnvolle Ergänzung zur Berechnung mit 
sqr();

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
T.roll schrieb:
> Es gab noch eine sinnvolle Ergänzung zur Berechnung mit sqr();

Arg sinnvoll war diese Ergänzung nicht, da es eine sqr-Funktion in C gar
nicht gibt. Sqr gibt es bspw. in  Pascal als Quadratfunktion und in
Basic als Quadratwurzelfunktion. Die Quadratwurzelfunktion in C, Pascal,
Fortran, Python und den meisten anderen von Basic verschiedenen
Sprachen heißt sqrt.

Da das aber mit der vor 11½ Jahren gestellten Frage kaum etwas zu tun
hat, lassen wir den Thread jetzt besser ruhen.

: Bearbeitet durch Moderator
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.