Namespaces
Variants

frexp, frexpf, frexpl

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
frexp
(C99) (C99)
(C99) (C23)
(C99)
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
Definido en el encabezado <math.h>
float frexpf ( float arg, int * exp ) ;
(1) (desde C99)
double frexp ( double arg, int * exp ) ;
(2)
long double frexpl ( long double arg, int * exp ) ;
(3) (desde C99)
Definido en el encabezado <tgmath.h>
#define frexp( arg, exp )
(4) (desde C99)
1-3) Descompone el valor de punto flotante dado x en una fracción normalizada y una potencia integral de dos.
4) Macro genérico de tipos: Si arg tiene tipo long double , frexpl es llamado. De lo contrario, si arg tiene tipo entero o el tipo double , frexp es llamado. De lo contrario, frexpf es llamado, respectivamente.

Contenidos

Parámetros

arg - valor de punto flotante
exp - puntero a valor entero para almacenar el exponente

Valor de retorno

Si arg es cero, retorna cero y almacena cero en *exp .

De lo contrario (si arg no es cero), si no ocurren errores, retorna el valor x en el rango (-1;-0.5], [0.5; 1) y almacena un valor entero en * exp tal que x×2 (*exp)
=arg
.

Si el valor a almacenar en *exp está fuera del rango de int , el comportamiento no está especificado.

Si arg no es un número de punto flotante, el comportamiento no está especificado.

Manejo de errores

Esta función no está sujeta a ningún error especificado en math_errhandling .

Si la implementación soporta aritmética de punto flotante IEEE (IEC 60559),

  • Si arg es ±0, se devuelve sin modificaciones y se almacena 0 en * exp .
  • Si arg es ±∞, se devuelve y se almacena un valor no especificado en * exp .
  • Si arg es NaN, se devuelve NaN y se almacena un valor no especificado en * exp .
  • No se generan excepciones de punto flotante.
  • Si FLT_RADIX es 2 (o una potencia de 2), el valor devuelto es exacto y el modo de redondeo actual se ignora.

Notas

En un sistema binario (donde FLT_RADIX es 2 ), frexp puede implementarse como

{
    *exp = (value == 0) ? 0 : (int)(1 + logb(value));
    return scalbn(value, -(*exp));
}

La función frexp , junto con su dual, ldexp , puede utilizarse para manipular la representación de un número de punto flotante sin manipulaciones directas de bits.

Ejemplo

#include <float.h>
#include <math.h>
#include <stdio.h>
int main(void)
{
    double f = 123.45;
    printf("Given the number %.2f or %a in hex,\n", f, f);
    double f3;
    double f2 = modf(f, &f3);
    printf("modf() makes %.0f + %.2f\n", f3, f2);
    int i;
    f2 = frexp(f, &i);
    printf("frexp() makes %f * 2^%d\n", f2, i);
    i = ilogb(f);
    printf("logb()/ilogb() make %f * %d^%d\n", f/scalbn(1.0, i), FLT_RADIX, i);
}

Salida posible:

Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.12.6.4 Las funciones frexp (p: TBD)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: TBD)
  • F.10.3.4 Las funciones frexp (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.12.6.4 Las funciones frexp (p: TBD)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: TBD)
  • F.10.3.4 Las funciones frexp (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.12.6.4 Las funciones frexp (p: 243)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: 373-375)
  • F.10.3.4 Las funciones frexp (p: 521)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.12.6.4 Las funciones frexp (p: 224)
  • 7.22 Matemáticas genéricas de tipo <tgmath.h> (p: 335-337)
  • F.9.3.4 Las funciones frexp (p: 458)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.5.4.2 La función frexp

Véase también

multiplica un número por 2 elevado a una potencia
(función)
(C99) (C99) (C99)
extrae el exponente del número dado
(función)
(C99) (C99) (C99)
extrae el exponente del número dado
(función)
(C99) (C99)
descompone un número en partes entera y fraccionaria
(función)