1

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

4

1 に答える 1

5

それ1e309は double を与えるリテラルだからです。long-double リテラルを使用する必要があります1e309L

于 2010-04-02T07:27:03.237 に答える