[求助]还是关于无理数e的近似计算
帮忙看看这个计算怎么不对是求无理数e的
e=1+1/1!+1/2!+.......+1/n! ( 1/n!<1e-5)
#include<stdio.h>
#include<conio.h>
double fun (int n)
{double a=1.0,b=1.0,e=0.0;
int k=0;
if(n==0||k==0)
return 1.0;
for(;n>=0;n--)
a*=n--;a=1/a;
while(k>=0)
{
if(a>=1e-5)
{
for(k=0;k<=n;k++)
b*=k;b=1.0/b;e+=b;
}
return e;
}
}
main()
{
int n;
scanf("%d\n",&n);
printf("e=%lf\n",fun(n));
}
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<conio.h>
double fun (int n)
{double a=1.0,b=1.0,e=0.0;
int k=0;
if(n==0||k==0) /*任何时候都为真,当然返1.0*/
return 1.0;
----------------解决方案--------------------------------------------------------
觉得逻辑上还有点问题,认真思考一下.
----------------解决方案--------------------------------------------------------
#include<stdio.h>
double function(int n)
{ int i;
if(n==0)
return 1.0;
double e=0.0,a=1.0,sum=0.0;
for (int j=0;j<n;j++)
{//a=1;
for ( i=1;i<=j+1;i++)
{
a*=i;
}
if (1/a<1e-5)break;
sum+=1.0/a;
}
e=sum;
return e;
}
void main()
{
int n=0;
scanf("%d",&n);
printf("%lf",function(n));
}
----------------解决方案--------------------------------------------------------
我先说明一下:以下程序与楼主要求的不太一样,这里没有输入n的值,
我是这样想的:如果n的值不够大,则e得不到精确的值,如果输入的n很大,
使1/n!远小于1e-5,则程序也就运行到1/j!(近似为1e-5),故我觉得没必要输如n的值。
我运行过程序,e=1.718282,我认为所给公式有误,应为e=1+1/1!+1/2!+...+1/n!,所以以下程序中e的初始值为1.0。
#include<stdio.h>
double fun() /*函数也可放在主函数后,但需在main的定义语句前加声明语句:double fun();*/
{
int i=1,j;
double e=1.0,k=1.0;
while((1/k)>=1e-5)
{
k=1.0; /*容易漏掉*/
for(j=1;j<=i;j++)
k=k*j; /*求介成*/
e=e+1/k;
i++;
}
return e;
}
void main()
{
double e;
e=fun();
printf("e=%f\n",e);
getche();
}
----------------解决方案--------------------------------------------------------