ldexp, ldexpf, ldexpl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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) |
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
|
(C99)
(C99)
|
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) |
|
Documentation C++
pour
ldexp
|
|