Namespaces
Variants

ldexp, ldexpf, ldexpl

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
ldexp
(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 ldexpf ( float arg, int exp ) ;
(1) (desde C99)
double ldexp ( double arg, int exp ) ;
(2)
long double ldexpl ( long double arg, int exp ) ;
(3) (desde C99)
Definido en el encabezado <tgmath.h>
#define ldexp( arg, exp )
(4) (desde C99)
1-3) Multiplica un valor de punto flotante arg por el número 2 elevado a la potencia exp .
4) Macro genérico de tipos: Si arg tiene tipo long double , ldexpl es llamado. De lo contrario, si arg tiene tipo entero o el tipo double , ldexp es llamado. De lo contrario, ldexpf es llamado, respectivamente.

Contenidos

Parámetros

arg - valor de punto flotante
exp - valor entero

Valor de retorno

Si no ocurren errores, arg multiplicado por 2 elevado a la potencia de exp ( arg×2 exp
) es retornado.

Si ocurre un error de rango debido a desbordamiento, ±HUGE_VAL , ±HUGE_VALF , o ±HUGE_VALL es devuelto.

Si ocurre un error de rango debido a desbordamiento inferior, se devuelve el resultado correcto (después del redondeo).

Manejo de errores

Los errores se reportan como se especifica en math_errhandling .

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

  • A menos que ocurra un error de rango, FE_INEXACT nunca se activa (el resultado es exacto)
  • A menos que ocurra un error de rango, se ignora el modo de redondeo actual
  • Si arg es ±0, se devuelve sin modificación
  • Si arg es ±∞, se devuelve sin modificación
  • Si exp es 0, entonces arg se devuelve sin modificación
  • Si arg es NaN, se devuelve NaN.

Notas

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

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

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

Ejemplo

#include <errno.h>
#include <fenv.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
// #pragma STDC FENV_ACCESS ON
int main(void)
{
    printf("ldexp(7, -4) = %f\n", ldexp(7, -4));
    printf("ldexp(1, -1074) = %g (minimum positive subnormal double)\n",
            ldexp(1, -1074));
    printf("ldexp(nextafter(1,0), 1024) = %g (largest finite double)\n",
            ldexp(nextafter(1,0), 1024));
    // special values
    printf("ldexp(-0, 10) = %f\n", ldexp(-0.0, 10));
    printf("ldexp(-Inf, -1) = %f\n", ldexp(-INFINITY, -1));
    // error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("ldexp(1, 1024) = %f\n", ldexp(1, 1024));
    if (errno == ERANGE)
        perror("    errno == ERANGE");
    if (fetestexcept(FE_OVERFLOW))
        puts("    FE_OVERFLOW raised");
}

Salida posible:

ldexp(7, -4) = 0.437500
ldexp(1, -1074) = 4.94066e-324 (minimum positive subnormal double)
ldexp(nextafter(1,0), 1024) = 1.79769e+308 (largest finite double)
ldexp(-0, 10) = -0.000000
ldexp(-Inf, -1) = -inf
ldexp(1, 1024) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.12.6.6 Las funciones ldexp (p: TBD)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: TBD)
  • F.10.3.6 Las funciones ldexp (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.12.6.6 Las funciones ldexp (p: TBD)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: TBD)
  • F.10.3.6 Las funciones ldexp (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.12.6.6 Las funciones ldexp (p: 244)
  • 7.25 Matemáticas genéricas de tipos <tgmath.h> (p: 373-375)
  • F.10.3.6 Las funciones ldexp (p: 522)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.12.6.6 Las funciones ldexp (p: 225)
  • 7.22 Matemáticas genéricas de tipos <tgmath.h> (p: 335-337)
  • F.9.3.6 Las funciones ldexp (p: 459)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.5.4.3 La función ldexp

Véase también

descompone un número en significando y una potencia de 2
(función)
(C99) (C99) (C99) (C99) (C99) (C99)
calcula eficientemente un número multiplicado por FLT_RADIX elevado a una potencia
(función)