实际长双精度不符合的std :: numeric_limits同意
-
23-09-2019 - |
题
在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
。
不隶属于 StackOverflow