frexp, frexpf, frexpl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<math.h>
|
||
|
float
frexpf
(
float
arg,
int
*
exp
)
;
|
(1) | (depuis C99) |
|
double
frexp
(
double
arg,
int
*
exp
)
;
|
(2) | |
|
long
double
frexpl
(
long
double
arg,
int
*
exp
)
;
|
(3) | (depuis C99) |
|
Défini dans l'en-tête
<tgmath.h>
|
||
|
#define frexp( arg, exp )
|
(4) | (depuis C99) |
x
en une fraction normalisée et une puissance entière de deux.
frexpl
est appelé. Sinon, si
arg
a un type entier ou le type
double
,
frexp
est appelé. Sinon,
frexpf
est appelé, respectivement.
Table des matières |
Paramètres
| arg | - | valeur en virgule flottante |
| exp | - | pointeur vers une valeur entière pour stocker l'exposant |
Valeur de retour
Si
arg
est nul, renvoie zéro et stocke zéro dans
*exp
.
Sinon (si
arg
n'est pas zéro), si aucune erreur ne se produit, retourne la valeur
x
dans l'intervalle
(-1;-0.5], [0.5; 1)
et stocke une valeur entière dans
*
exp
telle que
x×2
(*exp)
=arg
.
Si la valeur à stocker dans
*exp
est en dehors de la plage de
int
, le comportement n'est pas spécifié.
Si
arg
n'est pas un nombre à virgule flottante, le comportement est non spécifié.
Gestion des erreurs
Cette fonction n'est pas sujette aux erreurs spécifiées dans
math_errhandling
.
Si l'implémentation prend en charge l'arithmétique à virgule flottante IEEE (IEC 60559),
-
Si
argest ±0, il est retourné, non modifié, et0est stocké dans * exp . -
Si
argest ±∞, il est retourné, et une valeur non spécifiée est stockée dans * exp . -
Si
argest NaN, NaN est retourné, et une valeur non spécifiée est stockée dans * exp . - Aucune exception de virgule flottante n'est levée.
- Si FLT_RADIX est 2 (ou une puissance de 2), la valeur retournée est exacte, le mode d'arrondi actuel est ignoré.
Notes
Dans un système binaire (où
FLT_RADIX
est
2
),
frexp
peut être implémenté comme suit
` et contient des termes spécifiques au C++ qui doivent être préservés. Seul le texte environnant (s'il y en avait) aurait été traduit en français.
La fonction
frexp
, ainsi que son dual,
ldexp
, peut être utilisée pour manipuler la représentation d'un nombre à virgule flottante sans manipulations directes de bits.
Exemple
#include <float.h> #include <math.h> #include <stdio.h> int main(void) { double f = 123.45; printf("Given the number %.2f or %a in hex,\n", f, f); double f3; double f2 = modf(f, &f3); printf("modf() makes %.0f + %.2f\n", f3, f2); int i; f2 = frexp(f, &i); printf("frexp() makes %f * 2^%d\n", f2, i); i = ilogb(f); printf("logb()/ilogb() make %f * %d^%d\n", f/scalbn(1.0, i), FLT_RADIX, i); }
Sortie possible :
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex, modf() makes 123 + 0.45 frexp() makes 0.964453 * 2^7 logb()/ilogb() make 1.92891 * 2^6
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 7.12.6.4 Les fonctions frexp (p: TBD)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
-
- F.10.3.4 Les fonctions frexp (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.12.6.4 Les fonctions frexp (p: TBD)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
-
- F.10.3.4 Les fonctions frexp (p: TBD)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.12.6.4 Les fonctions frexp (p: 243)
-
- 7.25 Mathématiques génériques <tgmath.h> (p: 373-375)
-
- F.10.3.4 Les fonctions frexp (p: 521)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.12.6.4 Les fonctions frexp (p: 224)
-
- 7.22 Mathématiques génériques de type <tgmath.h> (p: 335-337)
-
- F.9.3.4 Les fonctions frexp (p: 458)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 4.5.4.2 La fonction frexp
Voir aussi
|
(C99)
(C99)
|
multiplie un nombre par
2
élevé à une puissance
(fonction) |
|
(C99)
(C99)
(C99)
|
extrait l'exposant du nombre donné
(fonction) |
|
(C99)
(C99)
(C99)
|
extrait l'exposant du nombre donné
(fonction) |
|
(C99)
(C99)
|
décompose un nombre en parties entière et fractionnaire
(fonction) |
|
Documentation C++
pour
frexp
|
|