C++ 增加双精度的精度损失?

C++ 增加双精度的精度损失?,c++,double,precision,addition,C++,Double,Precision,Addition,伙计们!我遇到了一个小问题:我正在用三个双值做一个简单的加法。结果的精度比使用的值小 double minutes = 3; minutes = minutes / (24.0*60.0); // contains 0.00208333 double hours = 3; hours = hours / 24.0; // contains 0.125 double days = 3; // contains 3 double age = days + hours + minutes; //

伙计们!我遇到了一个小问题:我正在用三个双值做一个简单的加法。结果的精度比使用的值小

double minutes = 3;
minutes = minutes / (24.0*60.0);  // contains 0.00208333
double hours = 3;
hours = hours / 24.0; // contains 0.125
double days = 3; // contains 3 

double age = days + hours + minutes; // result is 3.12708 

我发现没有办法避免这种行为。

正如你帖子上的评论所说,计算似乎没有什么问题


如果你想看得更精确,考虑一下< < /p>

,计算似乎没有错,就像你的帖子所说的那样。


如果你想看到更多的精度,请考虑查找< /p>

没有问题。有效数字0.00208333和3.12708均为6。这是一个正确的结果。

没有问题。有效数字0.00208333和3.12708均为6。这是一个正确的结果。

有时为了根据所需的精度获得值,我们必须指定精度限制,以下是我的代码,运行良好,希望它能帮助:

double minutes = 3;
minutes = minutes / (24.0*60.0);
double hours = 3;
hours = hours / 24.0; 
double days = 3;
double age = days + hours + minutes;
printf("%.8f",age);//here i have included the places of precision (.8)

有时,为了根据所需的精度获得值,我们必须指定精度限制,以下是我的代码,它运行良好,希望能有所帮助:

double minutes = 3;
minutes = minutes / (24.0*60.0);
double hours = 3;
hours = hours / 24.0; 
double days = 3;
double age = days + hours + minutes;
printf("%.8f",age);//here i have included the places of precision (.8)

如何检查变量的值?问题是什么?计算似乎还可以。如何打印结果?是否要打印更多数字?请注意:1)根据您输出值的方式,您可能看不到所有有效数字,2)双精度无法准确表示0.1Re:精度:所有四个打印六个有效数字。区别在哪里?你是如何得到结果的
printf()
%g
%f
?如何检查变量的值?问题是什么?计算似乎还可以。如何打印结果?是否要打印更多数字?请注意:1)根据您输出值的方式,您可能看不到所有有效数字,2)双精度无法准确表示0.1Re:精度:所有四个打印六个有效数字。区别在哪里?你是如何得到结果的
printf()
%g
%f
?计算确实正确。我使用printf()验证了这一点。精度损失是由std::cerr输出或将其分配给std::stringstream造成的。赛特做到了。谢谢!计算确实是正确的。我使用printf()验证了这一点。精度损失是由std::cerr输出或将其分配给std::stringstream造成的。赛特做到了。谢谢!就我而言,这是一个问题,即使这可能不是不当行为就我而言,这是一个问题,即使这可能不是不当行为