frexp, frexpf, frexpl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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) |
x
en una fracción normalizada y una potencia integral de dos.
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
arges ±0, se devuelve sin modificaciones y se almacena0en * exp . -
Si
arges ±∞, se devuelve y se almacena un valor no especificado en * exp . -
Si
arges 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
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
|
(C99)
(C99)
|
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) |
|
Documentación de C++
para
frexp
|
|