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
为什么?
答案 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