为什么for循环是个无限循环,求解答
#include
using namespace std;
int main()
{
double i;
for (i = 0; i != 10; i += 0.1)
{
cout << i << endl;
}
system("pause");
}
for (i = 0; i != 10; i += 0.1)
浮点数比较,不要用==和!=,因为存在误差,会导致i出现接近10但是不等于10的情况,漏过循环终止条件
修改为
for (i = 0; i < 10; i += 0.1)
是的,==和!=都会绕过去,应该用<
浮点数, double 假设64位, 其中有一部分bit表示整数部分, 一部分表示小数部分, 还有一部分表示幂。
这里出现死循环, 有可能是
1) double 不能准确存储 10
2) 即便double能准确存储10, 但是在累加计算过程中,有可能不存准确存储中间数值、导致产生误差,从而使得死循环。
应该是第2点了。
一般这种情况下的比较是 计算差值的绝对值,自己定义一个阈值,小于这个阈值可以认为是相等。