web-dev-qa-db-fra.com

Quel est le suffixe C ++ pour les longs littéraux doubles?

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?

50
Walter

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

57
Vlad from Moscow

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.

18
Jens Gustedt

Votre préoccupation est valide et vous devez utiliser un suffixe L pour un double littéral long.

10
Ivaylo Strandjev