在Mac OS X 10.6.2,英特尔合作,与i686的-苹果darwin10-G ++ - 4.2.1,并与-arch x86_64的标志编译,我才注意到,虽然...
std::numeric_limits<long double>::max_exponent10 = 4932
...如预期,在很长的双实际上是设置为与指数超过308的值,它成为INF - 即在现实中却只有64位精度,而不是80bit的。
此外, sizeof()
是表示长双打为16个字节,它们应该的。
最后,使用<limits.h>
给出了相同的结果<limits>
。
有谁知道这种差异可能是什么?
long double x = 1e308, y = 1e309;
cout << std::numeric_limits<long double>::max_exponent10 << endl;
cout << x << '\t' << y << endl;
cout << sizeof(x) << endl;
给
4932
1E + 308 INF
16