#include <math.h> // <cmath> en C++
long llogb( double x ); // C2x
long llogbf( float x ); // C2x
long llogbl( long double x ); // C2x
Ces trois fonctions permettent d'extraire un exposant entier long, en base définie pas la constante FTL_RADIX
, de la valeur passée en paramètre.
Il correspond au plus grand entier tel que FLT_RADIXresult <= x
.
FLT_RADIX
est définie dans l'entête <float.h>
.
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).
logb, logbf et logbl
,
à la différence du type utilisé pour exprimer la valeur de retour.
FLT_RADIX
.
Attention ce paramètre ne doit pas être fixé à 0
.
Ces fonctions renvoient l'exposant entier, en base définie par la constante FLT_RADIX
, de la valeur passée en paramètre.
Si x vaut zéro, la constante FP_LLOGB0
sera renvoyée.
Si x vaut NaN
, la constante FP_LLOGBNAN
sera renvoyée.
Si x vaut + l'infini (ou s'il est trop grand), la constante LONG_MAX
sera renvoyée.
Enfin, si x vaut - l'infini (ou s'il est trop petit), la constante LONG_MIN
sera renvoyée.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <float.h> #include <math.h> #include <stdio.h> #include <stdlib.h> int main( int argc, char * argv[] ) { double x = 12.5; long exposant = ilogb( x ); printf( "L'exposant entier long de %g, en base %d est %ld.\n", x, FLT_RADIX, exposant ); 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 $> ./sample L'exposant entier long de 12.5, en base 2 est 3. $>
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 :