long double vs double

Я знаю, что размер различных типов данных может изменяться в зависимости от того, какую систему я использую. Я на Я использую XP 32 бита, и с помощью оператора sizeof () в C ++ кажется, что long double - это 12 байт, а double - 8.

Однако большинство основных источников заявляют, что long double - это 8 байт, и поэтому диапазон так же, как двойной.

Почему у меня 12 байтов? Если long double действительно 12 байтов, разве это не расширяет диапазон значений? Или длинная подпись используется только (цифры компилятора), когда значение превышает диапазон двойного и, следовательно, выходит за пределы 8 байтов?

Спасибо.

61
задан Z boson 12 May 2016 в 11:58
поделиться

2 ответа

Цитата из Википедии :

В архитектуре x86 большинство компиляторов реализуют long double как 80-битный тип расширенной точности, поддерживаемый этим оборудованием (иногда сохраняемый как 12 или 16 байтов для поддержки структуры данных.

и

Компиляторы также могут использовать long double для 128-битного формата четверной точности, который в настоящее время реализован в программном обеспечении.

Другими словами, да, long double может иметь возможность хранить больший диапазон значений, чем double . Но это полностью зависит от компилятора.

60
ответ дан 24 November 2019 в 17:23
поделиться

Стандартные размеры байтов для чисел - это гарантированные минимальные размеры на всех платформах. Они могут быть больше на некоторых системах, но никогда не будут меньше.

3
ответ дан 24 November 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: