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;
}
展开全部
给你个参考程序,需要更高的精度的话你就自己调整。没有自己编写(比较消耗时间),所以在网上帮你找了个,作了下修改,验证通过。
我尝试调整精度(增大循环次数),造成数据溢出。
你可以尝试解决这个问题,或者找个最大精度好了。
#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();
}
}
我尝试调整精度(增大循环次数),造成数据溢出。
你可以尝试解决这个问题,或者找个最大精度好了。
#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();
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询