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造成的。赛特做到了。谢谢!就我而言,这是一个问题,即使这可能不是不当行为就我而言,这是一个问题,即使这可能不是不当行为