//C语言中,求e=1/1!+1/2!+…+1/n!精确到10ˉ8
#include
int main(void)
{
long n = 0, ns = 1; double x = 0.0f, y=0.0f, e = 1.0f;
for(;;) {
n++; /*计算n*/
ns *= n; /*计算n!*/
x = ns;
y = 1.0f / x; /*计算1/n!*/
if (y < 1e-8) break; /*如果足够小则停止*/
e += y; /*计算e*/
}
printf("%9.8f\n", e); /*输出结果*/
return 0;
}
参考自:http://zhidao.baidu.com/link?url=U13lLtXlkIyBeFe4_G4I15Kc20oj9A0Xp_FCqeU6uV5CXvVNC37eWXcsl75vzRwilUUvZZmMxlUlVN2LPbfz_q
给你个参考程序,需要更高的精度的话你就自己调整。没有自己编写(比较消耗时间),所以在网上帮你找了个,作了下修改,验证通过。
我尝试调整精度(增大循环次数),造成数据溢出。
你可以尝试解决这个问题,或者找个最大精度好了。
#include
long factorial(long n)
{
if(n == 0 || n == 1)
return 1;
else
return n*factorial(n-1);
}
long power(long x, long y)
{
if(y == 0)
return 1;
else
return x*power(x, y-1);
}
void main()
{
double e;
int i;
for(i = 0, e = 0.0; i < 30; i++)
e += 1.0*power(1, i)/factorial(i);
printf("%lf", e);
printf("\n");
//getch();
}
}