#include <float.h> // <cfloat> en C++
Ces macros répondent à une question simple : combien de chiffres significatifs peut-on manipuler sans perdre l'information portée par le type flottant ? Il faut distinguer les chiffres de la significande dans la base interne et les chiffres décimaux utiles pour les conversions vers ou depuis du texte.
| Macro | Rôle |
|---|---|
FLT_MANT_DIG |
Nombre de chiffres en base FLT_RADIX dans la significande d'un float. |
DBL_MANT_DIG |
Nombre de chiffres en base FLT_RADIX dans la significande d'un double. |
LDBL_MANT_DIG |
Nombre de chiffres en base FLT_RADIX dans la significande d'un long double. |
FLT_DIG |
Nombre de chiffres décimaux conservables sans changement lors d'un aller-retour vers float. |
DBL_DIG |
Nombre de chiffres décimaux conservables sans changement lors d'un aller-retour vers double. |
LDBL_DIG |
Nombre de chiffres décimaux conservables sans changement lors d'un aller-retour vers long double. |
FLT_DECIMAL_DIG (C11) |
Nombre de chiffres décimaux permettant un aller-retour sûr pour un float. |
DBL_DECIMAL_DIG (C11) |
Nombre de chiffres décimaux permettant un aller-retour sûr pour un double. |
LDBL_DECIMAL_DIG (C11) |
Nombre de chiffres décimaux permettant un aller-retour sûr pour un long double. |
DECIMAL_DIG (C99) |
Nombre de chiffres pour le plus large type flottant supporté. Cette macro est obsolescente en C23. |
CR_DECIMAL_DIG (C23) |
Nombre de chiffres à utiliser pour les conversions correctement arrondies, si l'extension IEC 60559 est demandée avant l'inclusion de <float.h>. |
CR_DECIMAL_DIG n'est définie que si __STDC_WANT_IEC_60559_EXT__ est définie
avant la première inclusion de <float.h>.
L'exemple suivant affiche les chiffres significatifs conservables pour les trois types flottants standards.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <float.h> #include <stdio.h> int main() { printf( "FLT_DIG == %d\n", FLT_DIG ); printf( "DBL_DIG == %d\n", DBL_DIG ); printf( "LDBL_DIG == %d\n", LDBL_DIG ); printf( "FLT_DECIMAL_DIG == %d\n", FLT_DECIMAL_DIG ); printf( "DBL_DECIMAL_DIG == %d\n", DBL_DECIMAL_DIG ); printf( "LDBL_DECIMAL_DIG == %d\n", LDBL_DECIMAL_DIG ); return 0; } |
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 :