2014-02-04 4 views
36

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

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

const long double x = 3.14159265358979323846264338328; 

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

+2

Просто предобработки этого файла '#include LDBL_MAX' и вы видите' 1.18973149535723176502e + 4932L', которая отвечает на ваш вопрос. –

+0

Что касается вопроса «это волнение оправдано», это действительно зависит. Ваше значение PI имеет точность 1e-28. Машина epsilon для double составляет ~ 2.22e-16, поэтому она меньше, чем вы хотите, чтобы точно зафиксировать это число. Это имеет значение? В зависимости от того, нужно ли вам быть точным в ваших расчетах ... – IdeaHat

+0

@EricPostpischil это явно показывает, как изложить константу 'long double' ... (суффикс L) –

ответ

42

От C++ Standard

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

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

4 unsuffixed с плавающей константа имеет тип дважды. Если суффикс буквой f или F, он имеет тип float. Если суффикс буквы L или L, он имеет типа длинного двойной

+0

@Walter: http://en.cppreference.com/w/cpp/language/floating_literal –

15

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

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

9

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

+4

Откуда берутся' F? Я проверил стандарт C, и там это только 'L'. –

 Смежные вопросы

  • Нет связанных вопросов^_^