En C++ (et C), un littéral à virgule flottante sans suffixe par défaut est double
, tandis que le suffixe f
implique un float
. Mais quel est le suffixe pour obtenir un long double
?
Sans le savoir, je définirais, disons,
const long double x = 3.14159265358979323846264338328;
Mais mon inquiétude est que la variable x
contient moins de bits significatifs de 3.14159265358979323846264338328
que 64, car il s'agit d'un double
littéral. Cette inquiétude est-elle justifiée?
De la norme C++
Le type d'un littéral flottant est double, sauf indication contraire explicite par un suffixe. Les suffixes f et F spécifient float, les suffixes l et L spécifient long double.
Il est intéressant de comparer avec le paragraphe correspondant de la norme C. En C, on utilise le terme floating constant
au lieu de floating literal
en C++:
4 Une constante flottante sans suffixe a le type double. S'il est suffixé par la lettre f ou F, il a le type float. S'il est suffixé par la lettre l ou L, il a le type long double
Le suffixe C est L
. Je soupçonne fortement que c'est la même chose pour C++.
Votre inquiétude est justifiée. Votre littéral serait d'abord converti en double
, et donc tronqué, puis reconverti en long double
.
Votre préoccupation est valide et vous devez utiliser un suffixe L
pour un double littéral long.