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 scalbln, scalblnf et scalblnl

Entête à inclure

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

Fonctions scalbln, scalblnf et scalblnl

double scalbln( double value, long exp );                     // C99
float scalblnf( float value, long exp );                      // C99
long double scalblnl( long double value, long exp );          // C99

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

la constante FLT_RADIX est définie dans l'entête <float.h>. Sur la plupart des plateformes, FLT_RADIX est égal à 2, ce qui rend cette fonction équivalente à ldexp.

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). De plus, il existe trois autres variantes (scalbn, scalbnf,scalbnl) qui diffèrent par le fait qu'elles acceptent un second paramètre typé int plutôt que long.

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 
 23 
 24 
 25 
 26 
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main( int argc, char * argv[] ) {

    // 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 scalbln pour quelques puissances de FLT_RADIX.
    for( long e=0; e<10; e++ ) {
        double result = scalbln( value, e );
        printf( "%g * FLT_RADIX ^ %ld == %g\n", value, e, result );
    }

    // Pour information, on affiche FLT_RADIX
    printf( "FLT_RADIX == %d\n", FLT_RADIX );

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

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
0.21925 * FLT_RADIX ^ 0 == 0.21925
0.21925 * FLT_RADIX ^ 1 == 0.438499
0.21925 * FLT_RADIX ^ 2 == 0.876998
0.21925 * FLT_RADIX ^ 3 == 1.754
0.21925 * FLT_RADIX ^ 4 == 3.50799
0.21925 * FLT_RADIX ^ 5 == 7.01599
0.21925 * FLT_RADIX ^ 6 == 14.032
0.21925 * FLT_RADIX ^ 7 == 28.0639
0.21925 * FLT_RADIX ^ 8 == 56.1279
0.21925 * FLT_RADIX ^ 9 == 112.256
FLT_RADIX == 2
$>

Sujets connexes

Les fonctions ldexp, ldexpf et ldexpl
Les fonctions logb, logbf et logbl
Les fonctions scalbn, scalbnf et scalbnl