Я заметил на windows и linux x86, float - 4 байта, double - 8, но длинный двойной - 12 и 16 на x86 и x86_64 соответственно. Предполагается, что C99 будет разрушать такие барьеры с конкретными интегральными размерами.Почему авторы стандарта C/C99 не указывают ... стандартное значение для типов типов с плавающей точкой?
Первоначальное технологическое ограничение связано с тем, что процессор x86 не способен обрабатывать более 80 бит-операций (плюс 2 байта для его округления), но почему несоответствие в стандарте по сравнению с типами int? Почему бы им не пойти по крайней мере до 80-битной стандартизации?
Этот вопрос http://stackoverflow.com/questions/271076/what-is-the-difference-between-an-int-and-a-long-in-c/271132#271132 относится к C++, но он содержит для C. Это показывает, что целочисленные типы не стандартизированы даже в C: стандарт преднамеренно дает компилятору пространство для маневра, так что реализация может быть как можно быстрее. –
[long double] (https://en.wikipedia.org/wiki/Long_double#Implementations) - 8 байт в [MSVC] (http://msdn.microsoft.com/en-us/library/9cx8xs15.aspx) , и 10 байтов в [gcc] (http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/i386-and-x86_002d64-Options.html) (а также большинство других компиляторов), 12 или 16 байт - это просто дополнение для выравнивания –