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

 我来答
tomszheng2
2013-08-19 · TA获得超过1098个赞
知道小有建树答主
回答量:971
采纳率:0%
帮助的人:564万
展开全部
//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

1056648799
推荐于2017-11-26 · TA获得超过2839个赞
知道大有可为答主
回答量:1394
采纳率:98%
帮助的人:698万
展开全部
给你个参考程序,需要更高的精度的话你就自己调整。没有自己编写(比较消耗时间),所以在网上帮你找了个,作了下修改,验证通过。
我尝试调整精度(增大循环次数),造成数据溢出。
你可以尝试解决这个问题,或者找个最大精度好了。
#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();
}

}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式