i686-apple-darwin10-g++-4.2.1 を使用して Mac OS X 10.6.2、Intel で作業し、-arch x86_64 フラグを使用してコンパイルしていると、...
std::numeric_limits<long double>::max_exponent10 = 4932
...予想どおり、long double が実際に 308 を超える指数の値に設定されると、inf になります。つまり、実際には 80 ビットではなく 64 ビットの精度しかありません。
また、sizeof()
long double が 16 バイトであることを示しています。
最後に、 using<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