对于程序

#include<iostream>
using namespace std;
int main()
{
    double i;
    for(i=0; i!=10; i+=0.1){
        printf("%.lf\n", i);
//        printf("%.16lf\n", i);
    }
    return 0;
 } 

应该是在一百次循环后停止,然而实际结果是无限循环

原因是浮点数的小数运算会产生极其微小的误差

如截取部分输出样例:

0.0000000000000000
0.1000000000000000
0.2000000000000000
0.3000000000000000
0.4000000000000000
0.5000000000000000
0.6000000000000000
0.7000000000000000
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
1.2000000000000000
1.3000000000000000
1.4000000000000001
1.5000000000000002
1.6000000000000003
1.7000000000000004

可以发现从0.7开始逐渐产生误差,而这种微小的误差会被for循环中的判断条件所发现,于是造成i始终不会等于10

 

 

所以在判断条件中尽量不要使用浮点数,避免造成上面出现的死循环