Что такое суффикс С++ для длинных двойных литералов?

В С++ (и C) литерал с плавающей запятой без суффикса по умолчанию равен double, тогда как суффикс f подразумевает float. Но что такое суффикс, чтобы получить long double?

Не зная, я бы определил, скажем,

const long double x = 3.14159265358979323846264338328;

Но я беспокоюсь, что переменная x содержит меньше значащих бит 3.14159265358979323846264338328, чем 64, потому что это литерал double. Является ли это беспокойство оправданным?

Ответ 1

Из стандарта С++

Тип плавающего литерала является двойным, если явно не указано суффиксом. Суффиксы f и F задают float, суффиксы l и L укажите длинный двойной.

Интересно сравнить с соответствующим параграфом стандарта C. В C используется термин floating constant вместо floating literal в С++:

4 Неиспользуемая плавающая константа имеет тип double. Если суффикс буквой f или F, он имеет тип float. Если суффикс буквой l или L имеет тип long double

Ответ 2

Суффикс C L. Я бы очень сомневался, что он одинаковый для С++.

Ваше беспокойство оправдано. Ваш литерал сначала будет преобразован в double и, таким образом, усечен, а затем преобразован обратно в long double.

Ответ 3

Ваша забота действительна, и вы должны использовать суффикс L для длинного двойного литерала.