Работая на Mac OS X 10.6.2, Intel, с i686-apple-darwin10-g ++ - 4.2.1 и компилируя с флагом -arch x86_64, я только что заметил, что пока ...
std::numeric_limits<long double>::max_exponent10 = 4932
... как и ожидалось, когда long double фактически установлен на значение с показателем степени больше 308, он становится inf - т.е. в действительности он имеет точность только 64 бита вместо 80 бит.
Кроме того, 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 инф.
16