long double vs double

c++, floating-point, long-double

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.

Problem

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?

Original source

Related problems