En cas de doute, lisez les spécifications. La norme C++ indique que digits10
est:
Nombre de 10 chiffres de base pouvant être représentés sans modification.
C'est un peu vague; Heureusement, il y a une note:
équivalent à FLT_DIG, DBL_DIG, LDBL_DIG
Ceux-ci sont définis dans la norme C; regardons là-haut:
nombre de chiffres décimaux, q, de sorte que tout nombre à virgule flottante avec des chiffres décimaux q peut être arrondi en un nombre à virgule flottante avec Radix p chiffres b et à nouveau sans changement les q chiffres décimaux.
Alors std::numeric_limits<float>::digits10
est le nombre de chiffres décimaux tel que tout nombre à virgule flottante avec autant de chiffres ne change pas si vous le convertir en un float
et retour en décimal. Comme vous le dites, les flottants ont environ 7 chiffres de précision décimale, mais l'erreur dans la représentation des nombres décimaux et des flottants de largeur fixe n'est pas uniformément logarithmique. L'erreur relative à arrondir un nombre de la forme 1.xxx .. à un nombre fixe de décimales est presque dix fois plus grand que l'erreur relative de l'arrondi 9.xxx .. au même nombre de décimales. De même, en fonction de l'endroit où une valeur tombe dans une binade, l'erreur relative en l'arrondissant à 24 chiffres binaires peut varier d'un facteur de près de deux. En conséquence, tous les nombres décimaux à sept chiffres ne survivent pas à l'aller-retour pour flotter et revenir, mais tous les décimaux à six chiffres le font. Par conséquent, std::numeric_limits<float>::digits10
est 6.
Il n'y a pas autant de décimales à six et sept chiffres avec des exposants dans une plage valide pour le type float
; vous pouvez facilement écrire un programme pour les tester exhaustivement si vous n'êtes toujours pas convaincu.
Je suppose que vous vouliez dire std :: numeric_limits :: digits10, non? –
Scharron
@Scharron: Bien, merci d'avoir repéré ça. Copier et coller une erreur. – liori
duplication possible de [La précision des chiffres décimaux les plus significatifs pouvant être convertie en binaire et retour en décimal sans perte de signification 6 ou 7.225?] (Http://stackoverflow.com/questions/30688422/is-the-most- significatif-decimal-digits-precision-that-can-be-convert-to-binary) – Bryan