和原边 发表于 2015-8-28 18:54:56

求大神解释!!!为什么会产生不同的结果?

问题在fun函数的循环那。输入精度为0.0005。求π的值。
第一个程序输出结果为3.140578。
第二个程序输出结果为3.141106。




#include <stdio.h>
#include <math.h>
doublefun ( doubleeps)
{
        double s=1.0,s1=1.0,t,r;
        int n=1;
        while(s1>eps)
        {
                t=s1*n;r=2*n+1;
                s1=t/r;
                s=s+s1;
                n++;
        }
        return 2*s;
}

main( )
{ doublex;void NONO ();
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
NONO();
}

void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i ;
double x ;

fp = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
    fscanf(fp, "%lf", &x) ;
    fprintf(wf, "%lf\n", fun(x)) ;
}
fclose(fp) ;
fclose(wf) ;
}














#include <stdio.h>
#include <math.h>
doublefun ( doubleeps)
{
        double m, n, s;
        int i;
        s=1.0;m=3.0;n=1.0;
        for(i = 2; n/m > eps; i++)
        {
                s = s + n/m;
                n = n * i;
                m = m * (2*i+1);
        }
        return 2*s;
}

main( )
{ doublex;void NONO ();
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
NONO();
}

void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i ;
double x ;

fp = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
    fscanf(fp, "%lf", &x) ;
    fprintf(wf, "%lf\n", fun(x)) ;
}
fclose(fp) ;
fclose(wf) ;
}

Delta 发表于 2015-8-29 13:34:40

t = (n/m);t *= m*(2*i+1)

t = n/(2*i+1)
不同哦!
页: [1]
查看完整版本: 求大神解释!!!为什么会产生不同的结果?