Espacios de nombres
Variantes
Acciones

std::ldexp, std::ldexpf, std::ldexpl

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
ldexp
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)
Clasificación/comparación
(C++11)
(C++11)
(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       ldexp ( float x, int exp );
(1) (constexpr since C++23)
float       ldexpf( float x, int exp );
(2) (desde C++11)
(constexpr since C++23)
double      ldexp ( double x, int exp );
(3) (constexpr since C++23)
long double ldexp ( long double x, int exp );
(4) (constexpr since C++23)
long double ldexpl( long double x, int exp );
(5) (desde C++11)
(constexpr since C++23)
double      ldexp ( TipoEntero x, int exp );
(6) (desde C++11)
(constexpr since C++23)
1-5) Multiplica un valor de punto flotante x por el número 2 elevado a la potencia exp.
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

x - Valor de punto flotante.
exp - Valor entero.

[editar] Valor de retorno

Si no se producen errores, se devuelve x multiplicado por 2 a la potencia exp (x×2exp
).

Si se produce un error de rango debido a desbordamiento, se devuelve ±HUGE_VAL, ±HUGE_VALF, o ±HUGE_VALL.

Si se produce un error de rango debido a subdesbordamiento, se devuelve el valor correcto (después del redondeo).

[editar] Manejo de errores

Los errores se informan como se especifica en math_errhandling.

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

  • A menos que se produzca un error de rango, nunca se genera FE_INEXACT (el resultado es exacto).
  • A menos que se produzca un error de rango, se ignora el modo de redondeo actual.
  • Si x es +0, se devuelve +0.
  • Si x es -0, se devuelve -0.
  • Si x es +∞, se devuelve +∞.
  • Si x es -∞, se devuelve -∞.
  • Si exp es 0, entonces se devuelve x sin modificar.
  • Si x es NaN, se devuelve NaN.

[editar] Notas

En sistemas binarios (donde FLT_RADIX es 2), std::ldexp es equivalente a std::scalbn.

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

En muchas implementaciones, std::ldexp es menos eficiente que la multiplicación o división por una potencia de dos usando operadores aritméticos.

[editar] Ejemplo

#include <iostream>
#include <cmath>
#include <cerrno>
#include <cstring>
#include <cfenv>
 
// #pragma STDC FENV_ACCESS ON
int main()
{
    std::cout << "ldexp(7, -4) = " << std::ldexp(7, -4) << '\n'
              << "ldexp(1, -1074) = " << std::ldexp(1, -1074)
              << " (double subnormal mínimo positivo)\n"
              << "ldexp(nextafter(1,0), 1024) = "
              << std::ldexp(std::nextafter(1,0), 1024)
              << " (double finito más grande)\n";
    // valores especiales
    std::cout << "ldexp(-0, 10) = " << std::ldexp(-0.0, 10) << '\n'
              << "ldexp(-Inf, -1) = " << std::ldexp(-INFINITY, -1) << '\n';
    // manejo de errores
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "ldexp(1, 1024) = " << std::ldexp(1, 1024) << '\n';
    if (errno == ERANGE)
        std::cout << "    errno == ERANGE: " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_OVERFLOW))
        std::cout << "    Se generó FE_OVERFLOW\n";
}

Salida:

ldexp(7, -4) = 0.4375
ldexp(1, -1074) = 4.94066e-324 (double subnormal mínimo positivo)
ldexp(nextafter(1,0), 1024) = 1.79769e+308 (double finito más grande)
ldexp(-0, 10) = -0
ldexp(-Inf, -1) = -inf
ldexp(1, 1024) = inf
    errno == ERANGE: Resultado numérico fuera de rango
    Se generó FE_OVERFLOW

[editar] Véase también

(C++11)(C++11)
Descompone un número en mantisa y una potencia de 2
(función) [editar]
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)
Multiplica un número por FLT_RADIX elevado a una potencia
(función) [editar]