c++ double数据的循环精度有关问题

c++ double数据的循环精度问题
double i;
for(i=0;i<=1;i+=0.05)
{cout<<i<<endl;}

这里为什么最后只输到i=0.95,为什么没输出1,。还有如果将判断条件改为i!=1,却是死循环!求解啊大侠们

------解决方案--------------------
C/C++ code
    double i;
    for(i=0;i<=1.0001;i+=0.05)
    {
        cout<<i<<endl;
    }

------解决方案--------------------
你不能直接比较一个浮点数是否与另一个数相等
比如
double i = 0.1;
i*=200;
if(i == 20) //错误
通常你要定义一个精度,然后看其值是否在这个精度之内
#defien E 0.000001f
if( abs(i-20) < E) // 正确


你这里用到了<=
要这样
for(i=0;i<=(1+E);i+=0.05)

------解决方案--------------------
double有误差,把1修改为1.00001即可
------解决方案--------------------
最后一次循环i=1时受到条件for(i=0;i<=1;i+=0.05)
限制
------解决方案--------------------
浮点数迭代运算是尽可能要避免的

double i;
int j;

for (i = 0, j = 0; i < 1.001; ++j) // i 是存在误差的,这里假设你需要2位小数的精度
{
i = j * 0.05; // 一次性运算可以避免积累误差
cout << i << endl;
}

这种迭代运算,如果没办法用一次性运算代替,往往实际处理的时候会替换成整数算法