Search code examples
c++floating-pointlong-double

long double vs double


I know that size of various data types can change depending on which system I am on.

I use XP 32bits, and using the sizeof() operator in C++, it seems like long double is 12 bytes, and double is 8.

However, most major sources states that long double is 8 bytes, and the range is therefore the same as a double.

How come I have 12 bytes? If long double is indeed 12 bytes, doesn't this extends the range of value also? Or the long signature is only used (the compiler figures) when the value exceed the range of a double, and thus, extends beyond 8 bytes?


Solution

  • Quoting from Wikipedia:

    On the x86 architecture, most compilers implement long double as the 80-bit extended precision type supported by that hardware (sometimes stored as 12 or 16 bytes to maintain data structure .

    and

    Compilers may also use long double for a 128-bit quadruple precision format, which is currently implemented in software.

    In other words, yes, a long double may be able to store a larger range of values than a double. But it's completely up to the compiler.