c++ double数据的循环精度有关问题
c++ double数据的循环精度问题
double i;
for(i=0;i<=1;i+=0.05)
{cout<<i<<endl;}
这里为什么最后只输到i=0.95,为什么没输出1,。还有如果将判断条件改为i!=1,却是死循环!求解啊大侠们
------解决方案--------------------
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;
}
这种迭代运算,如果没办法用一次性运算代替,往往实际处理的时候会替换成整数算法