次の C コードを検討してください。
#include <stdio.h>
int main(int argc, char* argv[])
{
const long double ld = 0.12345678901234567890123456789012345L;
printf("%lu %.36Lf\n", sizeof(ld), ld);
return 0;
}
gcc 4.8.1
の下でコンパイルするとUbuntu x64 13.04
、次のように出力されます。
16 0.123456789012345678901321800735590983
これは、long double の重みが 16 バイトであることを示していますが、小数は 20 位までしか問題ないようです。それはどのように可能ですか?16 バイトはクワッドに対応し、クワッドは 33 から 36 の小数を与えます。