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
Défini dans l'en-tête <math.h>
float ldexpf ( float arg, int exp ) ;
(1) (depuis C99)
double ldexp ( double arg, int exp ) ;
(2)
long double ldexpl ( long double arg, int exp ) ;
(3) (depuis C99)
Défini dans l'en-tête <tgmath.h>
#define ldexp( arg, exp )
(4) (depuis C99)
1-3) Multiplie une valeur flottante arg par le nombre 2 élevé à la puissance exp .
4) Macro générique de type : Si arg a le type long double , ldexpl est appelé. Sinon, si arg a un type entier ou le type double , ldexp est appelé. Sinon, ldexpf est appelé, respectivement.

Table des matières

Paramètres

arg - valeur à virgule flottante
exp - valeur entière

Valeur de retour

Si aucune erreur ne se produit, arg multiplié par 2 à la puissance exp ( arg×2 exp
) est retourné.

Si une erreur de plage due à un dépassement de capacité se produit, ±HUGE_VAL , ±HUGE_VALF , ou ±HUGE_VALL est renvoyé.

Si une erreur de plage due à un dépassement inférieur se produit, le résultat correct (après arrondi) est retourné.

Gestion des erreurs

Les erreurs sont signalées comme spécifié dans math_errhandling .

Si l'implémentation prend en charge l'arithmétique à virgule flottante IEEE (IEC 60559),

  • Sauf en cas d'erreur de plage, FE_INEXACT n'est jamais déclenché (le résultat est exact)
  • Sauf en cas d'erreur de plage, le mode d'arrondi actuel est ignoré
  • Si arg est ±0, il est retourné inchangé
  • Si arg est ±∞, il est retourné inchangé
  • Si exp vaut 0, alors arg est retourné inchangé
  • Si arg est NaN, NaN est retourné.

Notes

Sur les systèmes binaires (où FLT_RADIX est 2 ), ldexp est équivalent à scalbn .

La fonction ldexp ("charger l'exposant"), ainsi que son dual, frexp , peut être utilisée pour manipuler la représentation d'un nombre à virgule flottante sans manipulations directes de bits.

Sur de nombreuses implémentations, ldexp est moins efficace que la multiplication ou la division par une puissance de deux en utilisant les opérateurs arithmétiques.

Exemple

#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");
}

Sortie possible :

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

Références

  • Norme C23 (ISO/CEI 9899:2024) :
  • 7.12.6.6 Les fonctions ldexp (p: TBD)
  • 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
  • F.10.3.6 Les fonctions ldexp (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.12.6.6 Les fonctions ldexp (p: TBD)
  • 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
  • F.10.3.6 Les fonctions ldexp (p: TBD)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.12.6.6 Les fonctions ldexp (p: 244)
  • 7.25 Mathématiques génériques de type <tgmath.h> (p: 373-375)
  • F.10.3.6 Les fonctions ldexp (p: 522)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.12.6.6 Les fonctions ldexp (p: 225)
  • 7.22 Mathématiques génériques de type <tgmath.h> (p: 335-337)
  • F.9.3.6 Les fonctions ldexp (p: 459)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 4.5.4.3 La fonction ldexp

Voir aussi

décompose un nombre en mantisse et puissance de 2
(fonction)
(C99) (C99) (C99) (C99) (C99) (C99)
calcule efficacement un nombre multiplié par FLT_RADIX élevé à une puissance
(fonction)