Discussion:
Zweierlogarithmus (log2) in C?
(zu alt für eine Antwort)
Haiko Cyriaks
2007-01-22 14:47:10 UTC
Permalink
Hallo,

mal 'ne vielleicht etwas blöde Frage: ich finde sowas fundamentales wie
eine Funktion für den Zweierlogarithmus (log2, ld oder so) nicht in C
(math.h, ...). Es gibt scheinbar nur log und log10.
Wo muss ich suchen?

Haiko
Jirka Klaue
2007-01-22 14:53:00 UTC
Permalink
Post by Haiko Cyriaks
(math.h, ...). Es gibt scheinbar nur log und log10.
Wo muss ich suchen?
log2(x) == log(x) / log(2)

Jirka
Claus Reibenstein
2007-01-22 15:43:36 UTC
Permalink
Post by Haiko Cyriaks
mal 'ne vielleicht etwas blöde Frage: ich finde sowas fundamentales wie
eine Funktion für den Zweierlogarithmus (log2, ld oder so) nicht in C
(math.h, ...). Es gibt scheinbar nur log und log10.
Was die Mathematiker "ln" nennen, heißt in C "log". Aber was ist ld? log10?
Post by Haiko Cyriaks
Wo muss ich suchen?
In der mathematischen Formelsammlung Deiner Wahl:

logN(x) = log(x) / log(N)

Dafür eine eigene Funktion zu schreiben, überlasse ich Dir als Übung :-)

Gruß. Claus
--
,~°O O
O <http://www.wedding-card.de/> ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Heinrich Schramm
2007-01-22 17:05:01 UTC
Permalink
Post by Claus Reibenstein
Aber was ist ld?
"logarithmus dualis", eine andere Schreibweise für "log2".

Gruß Heiner
Stefan Ram
2007-01-22 17:40:12 UTC
Permalink
Post by Haiko Cyriaks
mal 'ne vielleicht etwas blöde Frage: ich finde sowas fundamentales wie
eine Funktion für den Zweierlogarithmus (log2, ld oder so) nicht in C
(math.h, ...). Es gibt scheinbar nur log und log10.
Wo muss ich suchen?
Der ganzzahlige Zweierlogarithmus von n kann schnell ermittelt
werden, wenn man einer Idee von Dann Corbit folgt:

i = (n & 0xffff0000) ? 16 : 0;
if ((n >>= i) & 0xff00) i |= 8, n >>= 8;
if (n & 0xf0) i |= 4, n >>= 4;
if (n & 0xc) i |= 2, n >>= 2;
return (short)(i | (n >> 1));

Dabei scheinen 4 Oktette für ein int vorausgesetzt worden zu
sein.
Stefan Reuther
2007-01-22 17:03:07 UTC
Permalink
Post by Haiko Cyriaks
mal 'ne vielleicht etwas blöde Frage: ich finde sowas fundamentales wie
eine Funktion für den Zweierlogarithmus (log2, ld oder so) nicht in C
(math.h, ...). Es gibt scheinbar nur log und log10.
Wo muss ich suchen?
Eine C99-Bibliothek hat 'log2' (was vor allem deswegen eine Gute Idee
war, weil log und log10 in der FPU eh über den Zweierlogarithmus
ausgerechnet werden).

Ansonsten ist vielleicht 'frexp' auch hilfreich; diese Funktion
extrahiert nur den Exponenten aus der gegebenen Zahl und kommt damit
ohne langes Gerechne aus.


Stefan

Loading...