scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<math.h>
|
||
|
float
scalbnf
(
float
arg,
int
exp
)
;
|
(1) | (depuis C99) |
|
double
scalbn
(
double
arg,
int
exp
)
;
|
(2) | (depuis C99) |
|
long
double
scalbnl
(
long
double
arg,
int
exp
)
;
|
(3) | (depuis C99) |
|
Défini dans l'en-tête
<tgmath.h>
|
||
|
#define scalbn( arg, exp )
|
(4) | (depuis C99) |
|
Défini dans l'en-tête
<math.h>
|
||
|
float
scalblnf
(
float
arg,
long
exp
)
;
|
(5) | (depuis C99) |
|
double
scalbln
(
double
arg,
long
exp
)
;
|
(6) | (depuis C99) |
|
long
double
scalblnl
(
long
double
arg,
long
exp
)
;
|
(7) | (depuis C99) |
|
Défini dans l'en-tête
<tgmath.h>
|
||
|
#define scalbln( arg, exp )
|
(8) | (depuis C99) |
scalbnl
ou
scalblnl
est appelé. Sinon, si
arg
a un type entier ou le type
double
,
scalbn
ou
scalbln
est appelé. Sinon,
scalbnf
ou
scalblnf
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
FLT_RADIX
à la puissance de
exp
(
arg×FLT_RADIX
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é, non modifié.
- Si arg est ±∞, il est retourné, non modifié.
-
Si
exp
est 0, alors
argest retourné, non modifié. - Si arg est NaN, NaN est retourné.
Notes
Sur les systèmes binaires (où
FLT_RADIX
est
2
),
scalbn
est équivalent à
ldexp
.
Bien que
scalbn
et
scalbln
soient conçus pour effectuer l'opération efficacement, dans de nombreuses implémentations ils sont moins efficaces qu'une multiplication ou division par une puissance de deux utilisant les opérateurs arithmétiques.
La fonction
scalbln
est fournie car le facteur nécessaire pour passer de la plus petite valeur positive en virgule flottante à la plus grande valeur finie peut être supérieur à
32767
, la valeur garantie par la norme pour
INT_MAX
. En particulier, pour le
long
double
80 bits, le facteur est
32828
.
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("scalbn(7, -4) = %f\n", scalbn(7, -4)); printf("scalbn(1, -1074) = %g (minimum positive subnormal double)\n", scalbn(1, -1074)); printf("scalbn(nextafter(1,0), 1024) = %g (largest finite double)\n", scalbn(nextafter(1,0), 1024)); // special values printf("scalbn(-0, 10) = %f\n", scalbn(-0.0, 10)); printf("scalbn(-Inf, -1) = %f\n", scalbn(-INFINITY, -1)); // error handling errno = 0; feclearexcept(FE_ALL_EXCEPT); printf("scalbn(1, 1024) = %f\n", scalbn(1, 1024)); if (errno == ERANGE) perror(" errno == ERANGE"); if (fetestexcept(FE_OVERFLOW)) puts(" FE_OVERFLOW raised"); }
Sortie possible :
scalbn(7, -4) = 0.437500
scalbn(1, -1074) = 4.94066e-324 (minimum positive subnormal double)
scalbn(nextafter(1,0), 1024) = 1.79769e+308 (largest finite double)
scalbn(-0, 10) = -0.000000
scalbn(-Inf, -1) = -inf
scalbn(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.13 Les fonctions scalbn (p: TBD)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
-
- F.10.3.13 Les fonctions scalbn (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.12.6.13 Les fonctions scalbn (p: TBD)
-
- 7.25 Mathématiques génériques <tgmath.h> (p: TBD)
-
- F.10.3.13 Les fonctions scalbn (p: TBD)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.12.6.13 Les fonctions scalbn (p: 247)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: 373-375)
-
- F.10.3.13 Les fonctions scalbn (p: 523)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.12.6.13 Les fonctions scalbn (p: 228)
-
- 7.22 Mathématiques génériques de type <tgmath.h> (p: 335-337)
-
- F.9.3.13 Les fonctions scalbn (p: 460)
Voir aussi
|
(C99)
(C99)
|
décompose un nombre en mantisse et puissance de
2
(fonction) |
|
(C99)
(C99)
|
multiplie un nombre par
2
élevé à une puissance
(fonction) |
|
Documentation C++
pour
scalbn
|
|