标签:names double 运算 pac 程序 等于 div 使用 产生
对于程序
#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
所以在判断条件中尽量不要使用浮点数,避免造成上面出现的死循环
标签:names double 运算 pac 程序 等于 div 使用 产生
原文地址:https://www.cnblogs.com/ZGCblogs/p/14193903.html