Я знаю, что размер различных типов данных может изменяться в зависимости от того, какую систему я использую. Я на Я использую XP 32 бита, и с помощью оператора sizeof () в C ++ кажется, что long double - это 12 байт, а double - 8.
Однако большинство основных источников заявляют, что long double - это 8 байт, и поэтому диапазон так же, как двойной.
Почему у меня 12 байтов? Если long double действительно 12 байтов, разве это не расширяет диапазон значений? Или длинная подпись используется только (цифры компилятора), когда значение превышает диапазон двойного и, следовательно, выходит за пределы 8 байтов?
Спасибо.
Цитата из Википедии :
В архитектуре x86 большинство компиляторов реализуют long double как 80-битный тип расширенной точности, поддерживаемый этим оборудованием (иногда сохраняемый как 12 или 16 байтов для поддержки структуры данных.
и
Компиляторы также могут использовать long double для 128-битного формата четверной точности, который в настоящее время реализован в программном обеспечении.
Другими словами, да, long double
может иметь возможность хранить больший диапазон значений, чем double
. Но это полностью зависит от компилятора.
Стандартные размеры байтов для чисел - это гарантированные минимальные размеры на всех платформах. Они могут быть больше на некоторых системах, но никогда не будут меньше.