The size of all of the basic types is implementation defined, with
minimums. In particular, all that you are guaranteed is that double
doesn't have less precision and range than float
, and that long
double
doesn't have less precision and range than double
.
From a quality of implementation point of view, the compiler should give
you the best that the hardware offers. Many (most?) architectures only
have two hardware supported floating point types; on such architectures,
double
and long double
will normally be identical. On some
architectures, it might make sense to have all three identical. On
Intel, a quality implementation will have three different types, because
that's what the hardware offers (but an implementation would still be
compliant even if all three floating point types were identical). On
the other hand, you can argue different sizes for long double
: 10
(never seen), 12 (g++) or 16 bytes, for alignment reasons (with some of
the bytes unused). An implementation for Intel where long double
and
double
are identical is, however, simply poor quality, and not
non-conformant.