双数据类型导致错误

时间:2017-02-15 11:51:42

标签: c++ double

我试图得到帐篷方程的固定点。在给定的初始条件下,解决方案必须为0.6。当我使用float for x0时,一切正常,但是当我将x0定义为double时,解决方案在第55次迭代中变为0.59999,这会导致下一次迭代的进一步更改,依此类推。选择数据类型时为什么会有这样的差异?

using namespace std;
#include <iostream>
main()

{
    double x0=.6;
    for (int i=0;i<100;i++)
    {
        if(x0<.5)
            x0=1.5*x0;
        else
            x0=1.5*(1-x0);

        cout << i << "\t" << x0 << endl;

    }

}

我发布了结果图片。 Comparison of solutions - Float and Double

1 个答案:

答案 0 :(得分:2)

使用0.5999994832150543633275674437754787504673004150390625时,第55次迭代的实际值为double,而0.60000002384185791015625(在我的系统上)为float

两者之间的区别在于精确度这些数字是什么,而四舍五入是让你失望的原因。

顺便说一句,这两个值都不是绝对准确,它们只是足够近似而已。 double更“精确”。

<强>更新

经过几次反复评论后发现浮点运算不需要杜松子酒。整数(稍加修改)做得很好不会引入任何舍入。