简单有关问题!这个为什么成死循环了打星号处
简单问题!这个为什么成死循环了打星号处。
#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了.
#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了.