Share via


frexp, frexpf, frexpl

Obtient la mantisse et l’exposant d’un nombre à virgule flottante.

Syntaxe

double frexp(
   double x,
   int *expptr
);
float frexpf(
   float x,
   int * expptr
);
long double frexpl(
   long double x,
   int * expptr
);
#define frexpl(X, INT_PTR) // Requires C11 or higher
float frexp(
   float x,
   int * expptr
);  // C++ only
long double frexp(
   long double x,
   int * expptr
);  // C++ only

Paramètres

x
Valeur à virgule flottante.

expptr
Pointeur désignant l’exposant entier stocké.

Valeur retournée

frexp retourne la mantisse. Si x a la valeur 0, la fonction retourne 0 pour la mantisse et l’exposant. Si expptr c’est NULLle cas, le gestionnaire de paramètres non valide est appelé comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, cette fonction affecte à errno la valeur EINVAL et retourne 0.

Notes

La frexp fonction décompose la valeur à virgule flottante (x) en mantissa (m) et un exposant (n), de sorte que la valeur absolue est m supérieure ou égale à 0,5 et inférieure à 1,0 etmx = * 2.n L’exposant entier n est stocké à l’emplacement désigné par expptr.

C++ autorisant la surcharge, vous pouvez appeler des surcharges de frexp. Dans un programme C, sauf si vous utilisez la <macro tgmath.h> pour appeler cette fonction, frexp prend toujours un double pointeur et int retourne un double.

Si vous utilisez la <macro tgmath.h>frexp() , le type de l’argument détermine la version de la fonction sélectionnée. Pour plus d’informations, consultez les mathématiques génériques de type.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Fonction En-tête requis
frexp, frexpf, frexpl <math.h>
Macro frexp <tgmath.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_frexp.c
// This program calculates frexp( 16.4, &n )
// then displays y and n.

#include <math.h>
#include <stdio.h>

int main( void )
{
   double x, y;
   int n;

   x = 16.4;
   y = frexp( x, &n );
   printf( "frexp( %f, &n ) = %f, n = %d\n", x, y, n );
}
frexp( 16.400000, &n ) = 0.512500, n = 5

Voir aussi

Prise en charge mathématique et à virgule flottante
ldexp
modf, modff, modfl