在C ++中使用pow时的精度损失

时间:2015-04-22 03:31:25

标签: c++ precision pow

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

为什么?

1 个答案:

答案 0 :(得分:7)

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第二个代码snippit中p的原始值显示-1.64605时(由于精度降低格式),您假设它 正好是-1.64605而实际上它介于-1.64605115 ...和-1.64605213 ...之间, 在表达式cout << pow(10, (-p));中评估为44.2641