Participer au site avec un Tip
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 ldexp, ldexpf et ldexpl

Entête à inclure

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

Fonctions ldexp, ldexpf et ldexpl

double ldexp( double x, int exp );
float ldexpf( float x, int exp );                      // C99
long double ldexpl( long double x, int exp );          // C99

Ces trois fonctions multiplient la première valeur passée en paramètre par 2 élevé à la puissance spécifiée par le second paramètre (ldexp(x,exp) = x * 2exp).

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 logf et logl ont été ajoutées dans C99.

Paramètres

Valeur de retour

Exemple de code

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

int main() {

    // On initialise le générateur de nombres pseudo aléatoire
    // avec le timestamp courant.
    srand ( time ( NULL));

    // On calcule une valeur aléatoire de type double entre [1, 10[.
    double value = ( rand() / (double) RAND_MAX ) * 10;

    // On invoque la fonction ldexp pour quelques puissances de 2.
    for( int e=0; e<10; e++ ) {
        double result = ldexp( value, e );
        printf( "%g * 2 ^ %d == %g\n", value, e, result );
    }

    return EXIT_SUCCESS;
}
Exemple d'utilisation des fonctions log.

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
6.49782 * 2 ^ 0 == 6.49782
6.49782 * 2 ^ 1 == 12.9956
6.49782 * 2 ^ 2 == 25.9913
6.49782 * 2 ^ 3 == 51.9825
6.49782 * 2 ^ 4 == 103.965
6.49782 * 2 ^ 5 == 207.93
6.49782 * 2 ^ 6 == 415.86
6.49782 * 2 ^ 7 == 831.72
6.49782 * 2 ^ 8 == 1663.44
6.49782 * 2 ^ 9 == 3326.88
$>

Sujets connexes

Les fonctions exp2, exp2f et exp2l
Les fonctions frexp, frexpf et frexpl
Les fonctions logb, logbf et logbl
Les fonctions log2, log2f et log2l
Les fonctions scalbn, scalbnf et scalbnl
Les fonctions scalbln, scalblnf et scalblnl