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
(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.
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.
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.
Wenn er in den letzten 11 Jahren!!!!!!!!!!! keine Lösung gefunden hat, ist ihm nicht mehr zu helfen.
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();
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