【看书】浮点数陷阱
《算法竞赛入门经典(第2版)》
P36 题目2 下面的程序运行结果是什么?“!=”运算符表示“不相等”。提示:请上机实验,不要凭主观感觉回答。
#include<stdio.h>
int main() {
double i;
for(i=0; i!=10; i+=0.1)
printf("%.lf\n",i);
return 0;
}
运行结果:
可以发现程序会一直循环下去
把代码改成如下
#include<stdio.h>
int main() {
double i;
for(i=0; i!=10&&i<20; i+=0.1)
printf("%.lf\n",i);
return 0;
}
可以发现
c语言中double类型数据计算是有误差的
也就是说每次加0.1
可能永远得不到整10
所以上述程序会永远循环