実際の長い倍精度のstd :: numeric_limitsのに同意しません
-
23-09-2019 - |
質問
は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
を使用する必要があります。
所属していません StackOverflow