求C++高手帮忙解答我做的求e的x次方(=1+x/1+x^2/2!+x^3/3!+...)哪里不对了?带入负数就是不对T^T

#include<iostream.h>
#include<conio.h>
#include<cmath>
long f1(int n)
{long s;
if(n==0||n==1) s=1;
else s=n*f1(n-1);
return s;
}
double f2(double x,int n)
{double s=1.0;
double z=fabs(n);
for(int i=0;i<z;i++)
s=s*x;
return s;
}
double ex(double x)
{double sum=0,s=0;
int i=1;
s=f2(x,i)/f1(i);
double y=fabs(s);
while(y>1e-20)
{sum+=s;
i++;
s=f2(x,i)/f1(i);
}
return sum;
}
void main()
{
double x;
cout<<"输入x,计算e的x次方:";
cin>>x;
double t=exp(x);
cout<<"e的"<<x<<"次方="<<ex(x)+1<<endl;
cout<<t<<endl;
getch();
}

while(y>1e-20)
{sum+=s;
i++;
s=f2(x,i)/f1(i);
}
我怎么看这个循环要么不执行,要么死循环? y的值在循环体中不变化,y>1e-20要么恒为真,死循环,要么恒为假,不循环。y=fabs(s);这个语句应该加到循环体的末尾,也就是
while(y>1e-20)
{sum+=s;
i++;
s=f2(x,i)/f1(i);
y=fabs(s); 如果s的绝对值小于标准,那么精度就够了,停止计算。
}

所以我想你这个程序不是负值有问题,而是都有问题。
楼上的都不对。另外,z最好取整数,因为n是整数,z是n的绝对值,用来控制循环次数,没必要用双精度浮点数
“遇到负数时,先求正的, 再取倒数(e^n = 1/e^-n)。 ”不能为错,但是多此一举。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-01
你这个只能求正数的e次方。
遇到负数时,先求正的, 再取倒数(e^n = 1/e^-n)。
第2个回答  2011-12-01
double z=fabs(n);你把数取绝对值自然在负数下会错误
第3个回答  2011-12-07
="<<e(x)+1
相似回答