110 votes

Comment écrire log base (2) dans c / c ++

Est-il possible d'écrire la fonction log (base 2)?

Le langage C a 2 fonctions intégrées - >>

1. log qui est la base e.

2. log10 base 10;

Mais j'ai besoin de la fonction de journalisation de la base 2.Comment calculer cela.

212voto

Adam Crume Points 7444

Mathématiques simples:

log 2 ( x ) = log y ( x ) / log y (2)

y peut être n'importe quoi, qui pour les fonctions de journalisation standard est 10 ou e .

68voto

Matthew Flaschen Points 131723

C99 (la dernière version de C) a log2 (ainsi que log2f et log2l pour les valeurs float et long double).

56voto

tomlogic Points 5044

Si vous recherchez un résultat intégral, vous pouvez simplement déterminer le bit le plus élevé défini dans la valeur et renvoyer sa position.

44voto

logicray Points 311
 #define M_LOG2E 1.44269504088896340736 //log2(e)

inline long double log2(const long double x){
    return  log(x) * M_LOG2E;
}
 

(multiplication plus rapide que la division)

9voto

Patrick Points 12750

Comme indiqué sur http://en.wikipedia.org/wiki/Logarithm :

 logb(x) = logk(x) / logk(b)
 

Ce qui signifie que:

 log2(x) = log10(x) / log10(2)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X