質問

はi686-りんごdarwin10-G ++で、マックOS X 10.6.2、インテルでの作業 - 4.2.1、および-arch x86_64のフラグでコンパイルし、私はちょうどしばらく...

ということに気づきました
std::numeric_limits<long double>::max_exponent10 = 4932
...長いダブル実際に308よりも大きい指数との値に設定されているときのように、期待され、それがINFになり - 。すなわち、実際にそれが唯一の代わりに80ビットの64ビットの精度を持っている。

また、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

役に立ちましたか?

解決

1e309は、二重を与えるリテラルであるため、

それはです。あなたは長い間、二重のリテラル1e309Lを使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top