实际长双精度不同意的std :: numeric_limits(Actual long double

2019-10-20 20:44发布

在Mac OS X 10.6.2,英特尔合作,与i686的-苹果darwin10-G ++ - 4.2.1,并与-arch x86_64的标志编译,我才注意到,虽然...

std::numeric_limits<long double>::max_exponent10 = 4932

...如预期,在很长的双实际上是设置为与指数超过308的值,它成为INF - 即在现实中却只有64位精度,而不是80bit的。

此外, 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

Answer 1:

这是因为1e309是文字,给出了一个双。 你需要使用一个长双字面1e309L



文章来源: Actual long double precision does not agree with std::numeric_limits