在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

有帮助吗?

解决方案

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top