Размер всех основных типов определяется реализацией, с минимумами.В частности, все, что вам гарантировано, это то, что double
не имеет меньшей точности и диапазона, чем float
, и что long
double
не имеет меньшей точности и диапазона, чем double
.
С точки зрения качества реализации, компилятор должен дать вам лучшее, что предлагает оборудование.Многие (большинство?) Архитектур имеют только два аппаратно поддерживаемых типа с плавающей запятой;на таких архитектурах double
и long double
обычно одинаковы.На некоторых архитектурах может иметь смысл иметь все три идентичных.В Intel качественная реализация будет иметь три разных типа, потому что это то, что предлагает аппаратное обеспечение (но реализация все равно будет совместимой, даже если все три типа с плавающей запятой будут идентичны).С другой стороны, вы можете аргументировать разные размеры для long double
: 10 (никогда не видел), 12 (g ++) или 16 байтов, из соображений выравнивания (при этом некоторые байты не используются).Однако реализация для Intel, в которой long double
и double
идентичны, просто низкого качества и не является несовместимой.