Rechercher
 

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 :

Fonctions frexp, frexpf et frexpl

Entête à inclure

#include <math.h>  // <cmath> en C++

Fonctions frexp, frexpf et frexpl

double frexp( double value, int * exp );
float frexpf( float value, int * exp );                      // C99
long double frexpl( long double value, int * exp );          // C99

Ces trois fonctions permettent de décomposer une valeur en un nombre multiplicateur flottant et une puissance de 2. Par exemple, la valeur 1152 peut être décomposée en 0.5625 * 211 : l'appel à la fonction frexp( 1152 ) retournera 0.5625 et stockera la valeur 11 dans la variable passée par pointeur en second paramètre.

le terme frexp provenant de la signification anglaise de la fonction : split into FRaction and EXPonent.

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). Les fonctions frexpf et frexpl ont été ajoutées dans C99.

Paramètre

Valeur de retour

Ces fonctions renvoient le nombre multiplicateur flottant. La puissance de 2 sera stockée dans la variable pointée par le second paramètre.

Exemple de code

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main() {

    printf( "Veuillez saisir une valeur numérique : " );
    double value;
    scanf( "%lf", &value );
    
    int exp;
    double fraction = frexp( value, &exp );
    
    printf("%g = %g * 2^%d\n", value, fraction, exp );

    return EXIT_SUCCESS;
}
Exemple d'utilisation de la fonction frexp.

Il est a 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
Veuillez saisir une valeur numérique : 2029
2029 = 0.990723 * 2^11
$>  ./sample
Veuillez saisir une valeur numérique : 1152
1152 = 0.5625 * 2^11
$> 

Sujets connexes

La macro M_E

Les fonctions exp, expf et expl
Les fonctions exp2, exp2f et exp2l
Les fonctions exp10, exp10f et exp10l
Les fonctions expm1, expm1f et expm1l
Les fonctions log, logf et logl