2 hoch N: Wie in C?

Gast #296300
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.
Gast #5028606
Lesenswert?

Lupin schrieb:
> Das mit dem sqr() ist natürlich quatsch. heh

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

1
pow(x, 1.5)
 ==
1
pow(pow(x, 3), 0.5)
 ==
1
sqr(pow(x, 3))
 ==
1
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:
1
mul*pow(k, x)
 ==
1
mul<<(k_exp*x)

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

Bsp.:
1
5*pow(4, x)
 ==
1
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.
#5028753
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.
Moderator #5029042
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.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.