C语言编程:利用下面公式,求自然对数e的近似值 e=1+1/1!+1/2!+1/3!+............

如题所述

//C语言中,求e=1/1!+1/2!+…+1/n!精确到10ˉ8
#include <stdio.h>

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-26
给你个参考程序,需要更高的精度的话你就自己调整。没有自己编写(比较消耗时间),所以在网上帮你找了个,作了下修改,验证通过。
我尝试调整精度(增大循环次数),造成数据溢出。
你可以尝试解决这个问题,或者找个最大精度好了。
#include <stdio.h>
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();
}

}本回答被提问者和网友采纳
相似回答