frexp, frexpf, frexpl

Obtiene la mantisa y el exponente de un número de punto flotante.

Sintaxis

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

Parámetros

x
Valor de punto flotante.

expptr
Puntero al exponente de entero almacenado.

Valor devuelto

frexp devuelve la mantisa. Si x es 0, la función devuelve 0 para la mantisa y el exponente. Si expptr es NULL, el controlador de parámetros no válidos se invoca como se describe en Validación de parámetros. Si la ejecución puede continuar, esta función establece errno en EINVAL y devuelve 0.

Comentarios

La frexp función divide el valor de punto flotante (x) en una mantisa () y un exponente (mn), de modo que el valor absoluto de m es mayor o igual que 0,5 y menor que 1,0 y = xm * 2.n El exponente de entero n se almacena en la ubicación a la que apunta expptr.

Dado que C++ admite sobrecargas, puede llamar a las sobrecargas de frexp. En un programa de C, a menos que use la <macro tgmath.h> para llamar a esta función, frexp siempre toma un double y un int puntero y devuelve un double.

Si usa la macro <tgmath.h>frexp(), el tipo del argumento determina qué versión de la función se selecciona. Consulte Matemáticas de tipo genérico para obtener más información.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Función Encabezado necesario
frexp, frexpf, frexpl <math.h>
frexpMacro <tgmath.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

// 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

Consulte también

Compatibilidad con matemáticas y punto flotante
ldexp
modf, modff, modfl