Ce n'est pas garanti par la norme. La sémantique de conversion en virgule flottante littérale dans le code source sont spécifiées dans C 2011 [projet de N1570] 6.4.4.2. Cela indique que le recommandé, mais pas obligatoire, la pratique est que la traduction en temps de conversion de les constantes en virgule flottante doit correspondre au temps d'exécution de la conversion de chaînes de caractères par des fonctions de la bibliothèque, comme strtod
.
De plus, la norme n'exige même pas que les deux littéraux avec la même valeur mathématique, comme 1.23
et 1.230
, de se convertir à la même valeur. Ces exemples proviennent de note de bas de page 75 dans la norme, qui est une référence à un paragraphe indiquant que toutes les constantes en virgule flottante de la même source, la forme doit se convertir à la même valeur. Ainsi, 1.23
convertit toujours à la même valeur partout où il apparaît dans la source, mais 1.230
n'a pas nécessairement de se convertir à la même valeur qu' 1.23
ou 123e-2
. Même 123e-2
et 123e-02
peuvent être différentes.
atof(p)
est spécifié dans 7.22.1.2 être l'équivalent d' strtod(p, (char **) NULL)
sauf pour la façon dont ils se comportent avec des erreurs. strtod
est spécifié dans 7.22.1.3. Cette clause a certaines pratiques recommandées pour la précision, mais il est muet sur la correspondance de la traduction en temps de conversion de littéraux.