Что такое суффикс С++ для длинных двойных литералов?
В С++ (и 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
для длинного двойного литерала.