sizeof(long double) vs. std::numeric_limits and x86-64 vs x86

Michael Veksler mveksler@tx.technion.ac.il
Tue Sep 27 05:09:00 GMT 2011


Hello,

I wanted to check how many bits long double takes. So I checked 
sizeof(long double) which, naturally, may account for padding. On x86-64 
it takes 16 bytes and only 12 on x86, a difference of 4 bytes. This 
supported my hope that on x86-64 we would have "long double"= |__float128|.


But this difference does not exist in std::numeric_limits<long double>. 
Does it really mean that only the
padding is different between the architectures, but the type is still 
the same?

If "long double" != |__float128|, then is there any chance to have a 
correct definition of std::numeric_limits<__float128> in the near 
future? If not, where can I find macro names such as __LDBL_MANT_DIG__ 
for __float128?
Running
gcc -g -E -dM t.cpp | grep MANT_DIG__
gives only

    #define __FLT_MANT_DIG__ 24
    #define __DEC64_MANT_DIG__ 16
    #define __LDBL_MANT_DIG__ 64
    #define __DBL_MANT_DIG__ 53
    #define __DEC32_MANT_DIG__ 7
    #define __DEC128_MANT_DIG__ 34

no mention of anything like FLT128

Thanks

-- 
   Michael





More information about the Gcc-help mailing list