10^1.64605 = 44.2639330165
然而,在C++中使用pow
double p = pow(10,1.64605) returns 44.2641. 这里有提高精度的方法吗?我试着把两边都投给long double,但这也没什么帮助。
更有趣的是:
cout<<p;
double a = -1.64605;
cout<<pow(10,-a);
p = pow(10, (-p));
cout<<p;产出如下:
-1.64605
44.2639
44.2641为什么?
发布于 2015-04-22 05:56:08
cout正在截断双面以供显示,但是由pow计算的值可能至少与您预期的一样精确。有关如何在控制台中获得更高的精度,请参见:
How do I print a double value with full precision using cout?
考虑到大卫的催促,我会详细说明的。
你说的double p = pow(10,1.64605) returns 44.2641,但这是不正确的。它返回44.26393301653639156;如果没有任何格式说明符,它将显示为44.2639 (如您稍后看到的)。
当您在第二个代码片段中cout p的原始值时,它会显示-1.64605 (由于精度的降低),并且假设它是-1.64605,而实际上它在-1.64605115之间.和-1.64605213.,它在表达式cout << pow(10, (-p));中计算为44.2641。
发布于 2015-04-22 05:49:48
通过检查p就可以找到答案。您没有显示它是如何初始化的。
您会发现这个p != a,尽管当您将它们打印到控制台时,它们看起来是相同的。当您打印到控制台时,您只打印前6个有效小数位数。以更高的精度打印两个值,您将看到它们是不相等的。
你说过:
double p = pow(10,1.64605);计算结果为44.2641。但事实并非如此。如果您实际执行该代码,您将看到这一点。
double p = pow(10,1.64605);
cout << p;输出44.2639。
您的代码与上面的代码略有不同。它是:
cout << p;
p = pow(10, (-p));
cout << p;将p的原始值输出到完全精度,并将全部显示出来。
https://stackoverflow.com/questions/29787202
复制相似问题