#include <math.h> // <cmath> en C++
int ilogb( double x ); // C99
int ilogbf( float x ); // C99
int ilogbl( long double x ); // C99
Ces trois fonctions permettent d'extraire un exposant entier, 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_ILOGB0 sera renvoyée.
Si x vaut NaN, la constante FP_ILOGBNAN sera renvoyée.
Si x vaut + l'infini (ou s'il est trop grand), la constante INT_MAX sera renvoyée.
Enfin, si x vaut - l'infini (ou s'il est trop petit), la constante INT_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; int exposant = ilogb( x ); printf( "L'exposant entier de %g, en base %d est %d.\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 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 :