Возможный дубликат:
long double vs double
Я новичок в программировании, и я не могу понять разницу между длинным двойным и двойным в C и С++. Я попробовал Google, но не смог понять это и запутался. Кто-нибудь может помочь.?
Возможный дубликат:
long double vs double
Я новичок в программировании, и я не могу понять разницу между длинным двойным и двойным в C и С++. Я попробовал Google, но не смог понять это и запутался. Кто-нибудь может помочь.?
Чтобы процитировать стандарт С++, §3.9.1 ¶8:
Существует три типа с плавающей запятой: float, double и long double. Тип double обеспечивает как минимум такую же точность, как float, а double double double обеспечивает как минимум такую же точность, как double. Набор значений типа float является подмножеством набора значений типа double; набор значений типа double является подмножеством набора значений типа long double. Представление значений типов с плавающей запятой определяется реализацией. Интегральные и плавающие типы совместно называются арифметическими типами. Специализации стандартного шаблона std:: numeric_limits (18.3) должны указывать максимальное и минимальное значения каждого арифметического типа для реализации.
То есть double
занимает как минимум столько же памяти, сколько и float
и long double
, по меньшей мере, как double
. Эта дополнительная память используется для более точного представления числа.
В системах x86 float
обычно имеет длину 4 байта и может хранить числа размером около 3 × 10³⁸ и примерно равными 1,4 × 10⁻⁴⁵. Это номер IEEE 754 с единственной точностью, в котором хранится около 7 десятичных цифр дробного числа.
Также в системах x86 double
имеет длину 8 байтов и может хранить номера в формате двойной точности IEEE 754 , который имеет гораздо больший диапазон и сохраняет номера с большей точностью, около 15 десятичных цифр. На некоторых других платформах double
может быть не длиннее 8 байтов и действительно может быть таким же, как с одной точностью float
.
Стандарт требует только, чтобы long double
был как минимум точный, как double
, поэтому некоторые компиляторы будут просто рассматривать long double
, как если бы он был таким же, как double
. Но на большинстве чипов x86 10-байтовый расширенный формат точности 80-битный номер доступен через процессор с плавающей точкой, что обеспечивает еще большую точность, чем 64- бит double
, с точностью до 21 десятичной цифры точности.
Некоторые компиляторы вместо этого поддерживают 16-байтный (128-разрядный) IEEE 754 четырехчетный формат числа чисел с еще более точными представлениями и большим диапазоном.
Это зависит от вашего компилятора, но следующий код может отображать количество байтов, которое требуется каждому типу:
int main() {
printf("%d\n", sizeof(double)); // some compilers print 8
printf("%d\n", sizeof(long double)); // some compilers print 16
return 0;
}
A long <type>
тип данных может содержать большие значения, а затем тип данных <type>
, в зависимости от компилятора.