Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

La librairie <float.h> (<cfloat> en C++)

La macro __STDC_VERSION_FLOAT_H__


Accès rapide :
Présentation de l'entête <float.h>
Exemple d'utilisation
Eléments fournis par la librairie <float.h>
Notes de portabilité

Présentation de l'entête <float.h>

L'entête <float.h>, ou <cfloat> en C++, expose les caractéristiques des types flottants proposés par l'implémentation C : float, double et long double. Il ne fournit pas de fonctions, mais uniquement des macros décrivant la précision, les bornes, les exposants, le mode d'arrondi ou encore la présence de valeurs particulières comme les NaN et les infinis.

Pour utiliser ces macros, il suffit d'inclure l'entête suivant.

#include <float.h>  // <cfloat> en C++

Les valeurs exactes dépendent de l'implémentation. Sur une machine courante respectant les formats binaires ISO/IEC 60559, un float correspond généralement au format binary32 et un double au format binary64. Le standard C ne force cependant pas toutes les architectures à utiliser ces formats.

POSIX reprend cette entête pour s'aligner sur le standard C ISO. Il n'ajoute donc pas de macro spécifique à <float.h>.

Exemple d'utilisation

L'exemple suivant affiche quelques caractéristiques classiques des types float et double.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
#include <float.h>
#include <stdio.h>
#include <stdlib.h>

int main() {

    printf( "FLT_RADIX       == %d\n", FLT_RADIX );
    printf( "FLT_DIG         == %d\n", FLT_DIG );
    printf( "DBL_DIG         == %d\n", DBL_DIG );
    printf( "FLT_EPSILON     == %.9g\n", FLT_EPSILON );
    printf( "DBL_EPSILON     == %.17g\n", DBL_EPSILON );
    printf( "FLT_MAX         == %.9e\n", FLT_MAX );
    printf( "DBL_MAX         == %.17e\n", DBL_MAX );

    return EXIT_SUCCESS;
}
Lecture de quelques limites flottantes

Sur une plate-forme courante, vous pouvez obtenir un affichage proche de celui-ci.

FLT_RADIX       == 2
FLT_DIG         == 6
DBL_DIG         == 15
FLT_EPSILON     == 1.1920929e-07
DBL_EPSILON     == 2.2204460492503131e-16
FLT_MAX         == 3.402823466e+38
DBL_MAX         == 1.79769313486231571e+308

Eléments fournis par la librairie <float.h>

Nom Description
__STDC_VERSION_FLOAT_H__ (C23) Version de l'entête <float.h>.
FLT_ROUNDS, FLT_EVAL_METHOD, FLT_RADIX Macros décrivant l'arrondi, les formats d'évaluation et la base utilisée par les flottants standards.
FLT_DIG, DBL_DIG, LDBL_DIG... Macros de précision : chiffres significatifs, chiffres de conversion et significande.
FLT_MIN, DBL_MAX, LDBL_EPSILON... Macros de bornes, d'exposants, de plus grandes valeurs finies et d'epsilon.
FLT_TRUE_MIN, FLT_HAS_SUBNORM... (C11/C23) Macros liées aux nombres subnormaux.
FLT_SNAN, INFINITY, NAN... (C23) Macros liées à IEEE 60559, aux NaN et aux infinis.
DEC32_MAX, DEC64_MIN, DEC128_EPSILON... (C23) Macros optionnelles pour les flottants décimaux ISO/IEC 60559.

Notes de portabilité

Les macros DECIMAL_DIG et FLT_HAS_SUBNORM / DBL_HAS_SUBNORM / LDBL_HAS_SUBNORM sont considérées comme obsolescentes en C23. Les macros propres aux flottants décimaux ne sont disponibles que si l'implémentation définit __STDC_IEC_60559_DFP__. La macro CR_DECIMAL_DIG n'est proposée que si le code demande explicitement les extensions IEC 60559 avant l'inclusion de <float.h>.



La macro __STDC_VERSION_FLOAT_H__




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé