Подтвердить что ты не робот

Разница между длинными двойными и двойными в C и С++

Возможный дубликат:
long double vs double

Я новичок в программировании, и я не могу понять разницу между длинным двойным и двойным в C и С++. Я попробовал Google, но не смог понять это и запутался. Кто-нибудь может помочь.?

4b9b3361

Ответ 1

Чтобы процитировать стандарт С++, §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 четырехчетный формат числа чисел с еще более точными представлениями и большим диапазоном.

Ответ 2

Это зависит от вашего компилятора, но следующий код может отображать количество байтов, которое требуется каждому типу:

int main() { 
    printf("%d\n", sizeof(double)); // some compilers print 8
    printf("%d\n", sizeof(long double)); // some compilers print 16
    return 0;
}

Ответ 3

A long <type> тип данных может содержать большие значения, а затем тип данных <type>, в зависимости от компилятора.