#include <math.h> // <cmath> en C++
double logp12( double x ); // C2x
float log2p1f( float x ); // C2x
long double log2p1l( long double x ); // C2x
Ces trois fonctions permettent de calculer le logarithme, en base 2, de 1 plus la valeur passée en paramètre.
log2(32) == 5
car 25 == 32
.
La différence entre ces trois fonctions réside dans le type de données utilisé pour le paramètre et la valeur de retour (double, float ou long double).
Ces fonctions renvoient le logarithme, en base 2, de 1 plus la valeur spécifiée en paramètre, soit log2(1+x)
Si x est une valeur négative, ces fonctions renvoient une valeur NaN et la variable errno
sera
initialisée à la valeur EDOM
.
Si x est nulle, ces fonctions renvoient une valeur infinie et la variable errno
sera initialisée
à la valeur ERANGE
.
L'exemple de code suivant permet de calculer le nombre de bits utilisés pour exprimer une valeur binaire donnée.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <errno.h> #include <math.h> #include <stdio.h> #include <stdlib.h> int main() { double lg = log2p1( 15 ); printf( "log2p1(15) == %g\n", lg ); lg = log2p1( -2 ); printf( "log2p1(-2) == %g\n", lg ); if ( isnan( lg ) ) { printf( "log2p1(-2) - errno == EDOM: %d\n", errno == EDOM ); } lg = log2p1( -1 ); printf( "log2p1(-1) == %g\n", lg ); if ( isinf( lg ) ) { printf( "log2p1(-1) - errno == ERANGE: %d\n", errno == ERANGE ); } return EXIT_SUCCESS; } |
Il est à noter que la librairie mathématique doit être ajoutée durant l'étape de "link" (édition des liens) de votre exécutable.
Cela se réalise en ajoutant l'option -lm
à votre compilateur GCC. En cas d'utilisation d'un autre compilateur, je vous renvoie vers la documentation de ce dernier.
$> gcc -o sample sample.c -lm -std=c2x $> ./sample log2p1(15) == 4 log2p1(-2) == -nan log2p1(-2) - errno == EDOM: 1 log2p1(-1) == -inf log2p1(-1) - errno == ERANGE: 1 $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :