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

房东的猫 提交于 2021-02-04 15:01:29

问题


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.


回答1:


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.




回答2:


The size of all of the basic types is implementation defined, with minimums. In particular, all that you are guaranteed is that double doesn't have less precision and range than float, and that long double doesn't have less precision and range than double.

From a quality of implementation point of view, the compiler should give you the best that the hardware offers. Many (most?) architectures only have two hardware supported floating point types; on such architectures, double and long double will normally be identical. On some architectures, it might make sense to have all three identical. On Intel, a quality implementation will have three different types, because that's what the hardware offers (but an implementation would still be compliant even if all three floating point types were identical). On the other hand, you can argue different sizes for long double: 10 (never seen), 12 (g++) or 16 bytes, for alignment reasons (with some of the bytes unused). An implementation for Intel where long double and double are identical is, however, simply poor quality, and not non-conformant.



来源:https://stackoverflow.com/questions/8922216/why-are-double-and-long-double-completely-the-same-on-my-64-bit-machine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!