Namespaces
Variants

frexp, frexpf, frexpl

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
frexp
(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 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)
1-3) Décompose la valeur en virgule flottante donnée x en une fraction normalisée et une puissance entière de deux.
4) Macro générique de type : Si arg a le type long double , 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 arg est ±0, il est retourné, non modifié, et 0 est stocké dans * exp .
  • Si arg est ±∞, il est retourné, et une valeur non spécifiée est stockée dans * exp .
  • Si arg est 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

{
    *exp = (value == 0) ? 0 : (int)(1 + logb(value));
    return scalbn(value, -(*exp));
}
**Note:** Le code C++ n'a pas été traduit conformément aux instructions, car il se trouve dans des balises `
` 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

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)