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


von Stefan (Gast)


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
von Lupin (Gast)


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.

von Lupin (Gast)


Lesenswert?

Das mit dem sqr() ist natürlich quatsch. heh

von Lupin (Gast)


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

Oh mann, bin ich blind. Man dankt.Schöne Feiertage.

Stefan

von coder (Gast)


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.

von Wilhelm M. (wimalopaan)


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.

von Nick S. (c0re)


Lesenswert?

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

von T.roll (Gast)


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();

von Yalu X. (yalu) (Moderator)


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.