long double
long double
is a primitive floating-point data type in C (and subsequently C++) that is required by the standard to be at least as long as a double
. That is, the values it can represent must be a superset of the values that a double
can represent.
On many architectures, long double
is identical to double
, since double
is usually a binary64 and many architectures do not support a longer floating-point data type. On Intel x86 machines, however, long double
is often a 80-bit extended precision format that originated with the Intel 8087 numeric coprocessor. This format is almost exactly analogous to the IEEE 754 formats, except that its significand does not carry an implicit leading 1. It consists of a sign bit, a 15-bit biased exponent field, and a 64-bit significand field. Because the x86 processors are little-endian, when this kind of number is stored in memory, the lowest-address 8 bytes are used for the significand, the next byte is used for the least significant 8 bits of the exponent, and the last byte contains the sign bit as the most significant bit, followed by the most significant 7 bits of the exponent.