Espacios de nombres
Variantes
Acciones

std::frexp, std::frexpf, std::frexpl

De cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
Funciones matemáticas comunes
Funciones
Operaciones básicas
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
Funciones exponenciales
(C++11)
(C++11)
(C++11)
(C++11)
Funciones de potencias
(C++11)
(C++11)
Funciones trigonométricas e hiperbólicas
(C++11)
(C++11)
(C++11)
Funciones de error y gamma
(C++11)
(C++11)
(C++11)
(C++11)
Operaciones de punto flotante del entero más cercano
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
Funciones de manipulación de punto flotante
(C++11)(C++11)
(C++11)
(C++11)
frexp
(C++11)(C++11)
(C++11)
Clasificación/comparación
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Constantes de macro
(C++11)(C++11)(C++11)(C++11)(C++11)
 
Definido en el archivo de encabezado <cmath>
float       frexp (float arg, int* exp );
(1) (constexpr since C++23)
float       frexpf(float arg, int* exp );
(2) (desde C++11)
(constexpr since C++23)
double      frexp (double arg, int* exp );
(3) (constexpr since C++23)
longdouble frexp (longdouble arg, int* exp );
(4) (constexpr since C++23)
longdouble frexpl(longdouble arg, int* exp );
(5) (desde C++11)
(constexpr since C++23)
double      frexp ( TipoEntero arg, int* exp );
(6) (desde C++11)
(constexpr since C++23)
1-5) Descompone el valor de punto flotante dado arg en una fracción normalizada y una potencia entera de dos.
6) Un conjunto de sobrecargas o una plantilla de función que acepta un argumento de cualquier tipo entero. Equivalente a (3) (el argumento se convierte a double).

Contenido

[editar]Parámetros

arg - Valor de punto flotante.
exp - Puntero a valor entero en el que almacenar el exponente.

[editar]Valor de retorno

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

De lo contrario (si arg no es cero), si no se producen errores, devuelve 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.

[editar]Manejo de errores

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

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

  • Si arg es +0, se devuelve +0 y se almacena 0 en *exp.
  • Si arg es -0, se devuelve -0 y se almacena 0 en *exp.
  • Si arg es +∞, se devuelve +∞, y se almacena un valor no especificado 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, se ignora el modo de redondeo actual.

[editar]Notas

En sistemas binarios (donde FLT_RADIX es 2), frexp puede implementarse como

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

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

[editar]Ejemplo

Compara diferentes funciones de descomposición de punto flotante.

#include <iostream>#include <cmath>#include <limits>   int main(){double f =123.45;std::cout<<"Dado el número "<< f <<" o "<<std::hexfloat<< f <<std::defaultfloat<<" en hexadecimal,\n";   double f3;double f2 =std::modf(f, &f3);std::cout<<"modf() genera "<< f3 <<" + "<< f2 <<'\n';   int i; f2 = std::frexp(f, &i);std::cout<<"frexp() genera "<< f2 <<" * 2^"<< i <<'\n';   i =std::ilogb(f);std::cout<<"logb()/ilogb() genera "<< f/std::scalbn(1.0, i)<<" * "<<std::numeric_limits<double>::radix<<"^"<<std::ilogb(f)<<'\n';}

Posible salida:

Dado el número 123.45 o 0x1.edccccccccccdp+6 en hexadecimal, modf() genera 123 + 0.45 frexp() genera 0.964453 * 2^7 logb()/ilogb() genera 1.92891 * 2^6


[editar]Véase también

(C++11)(C++11)
Multiplica un número por 2 elevado a una potencia
(función)[editar]
(C++11)(C++11)(C++11)
Extrae el exponente del número
(función)[editar]
(C++11)(C++11)(C++11)
Extrae el exponente del número
(función)[editar]
(C++11)(C++11)
Descompone un número en sus partes entera y fraccionaria
(función)[editar]
close