简单有关问题!这个为什么成死循环了打星号处

简单问题!这个为什么成死循环了打星号处。

#include   "iostream.h "

void   main()
{
float   temp=0;
float   c;
int   n=1;
while(c!=temp)
{
cout < < "please   input   number " < <endl;
cin> > c;
if(c <0.01||c> 5.20||c==0)
{
cout < < "ERRor " < <endl;
break;
}
else   if(0.01 <c <5.20)
{
while(c!=temp)
* {
* temp=1/(n+1)+temp;
* n++;
* }
}
}
cout < <n;
}


------解决方案--------------------
楼主你的死循环是由于你对float型的变量进行了直接的=号比较的结果

float类型的比较不能用=号来决定,

因为它的精度太多,

很难保证完全一致.

所以对于float类型的比较要用绝对值来比较

也就是所谓的极限.

改一下你的如下:

while( (c-temp) <0.0001 && (c-temp)> -0.0001 )
{
temp=1/(n+1)+temp;
n++;
}

这样也就是当c-temp的绝对值小于0.0001时,我们认为c已经等于temp了.