实际的长双精度与std :: numeric_limits不一致

时间:2010-04-02 07:24:47

标签: c++ g++ precision x86-64 long-double

使用i686-apple-darwin10-g ++ - 4.2.1在Mac OS X 10.6.2上运行,并使用-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 inf
  16

1 个答案:

答案 0 :(得分:5)

这是因为1e309是一个双重的文字。您需要使用long-double文字1e309L