Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are double and long double completely the same on my 64 bit machine?

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.

like image 411
codekiddy Avatar asked Jan 19 '12 07:01

codekiddy


People also ask

Is long long the same as long double?

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.

What is the difference between double and long double?

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.

Does long double exist?

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.


1 Answers

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.

like image 86
Yuushi Avatar answered Sep 21 '22 15:09

Yuushi