This question may sound like for beginners, however when I found that out I thought I'm either a beginner or my comp is missing something:
int main()
{
cout << sizeof(double) << endl;
cout << sizeof(long double) << endl;
cout << DBL_DIG << endl;
cout << LDBL_DIG << endl;
return 0;
}
PROGRAM OUTPUT:
8
8
15
15
I thought long double
is 10 bytes and has 18 decimal digits while double
is 8 bytes and has 15 digits but it seems I was wrong.
Why is that so?
Using MSVC 2010 on 64bit machine.
long long is an integer and long double is floating point. long double must be at least as large as double but need not be larger; it is up to the implementation. long float does not exist in standard C.
The main difference between double and long double is that double is used to represent a double precision floating point while long precision is used to represent extended precision floating point value. In brief, long double provides more precision than double.
On some PowerPC systems, long double is implemented as a double-double arithmetic, where a long double value is regarded as the exact sum of two double-precision values, giving at least a 106-bit precision; with such a format, the long double type does not conform to the IEEE floating-point standard.
In MSVC++, long double
is a synonym for double
as you've found out. Apparently this is to take advantage of SSE/SSE2/SSE3 instruction sets which are limited to 64-bit operations.
See also here for more information.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With