首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

根据公式写的e^x算出来如何差这么多呢

2012-02-10 
根据公式写的e^x算出来怎么差这么多呢?利用公式e^xx^0/0!+x^1/1!+x^2/2!+...+x^9(题目要求前10项就可以了

根据公式写的e^x算出来怎么差这么多呢?
利用公式
e^x   =   x^0/0!   +   x^1/1!   +   x^2/2!   +   ...   +   x^9   (题目要求前10项就可以了)
以下是我编写的代码:

#include   "stdio.h "

int   f1();         //计算每项分子的值
int   f2();         //计算每项分母的值

int   main()
{
        printf( "请输入次方x: ");
        int   x;
        scanf( "%d ",   &x);
        int   i;
        float   sum   =   0;                 //每一项的值
        for(i   =   0;   i   <   10;   i++)                 //前十项和
        {
                //printf( "%f\n ",   (float)f1(x,   i)   /   (float)f2(i));         //这里每一项精度很准
                sum   =   sum   +   (float)f1(x,   i)   /   (float)f2(i);
        }
        printf( "e^%d   =   %f\n ",   x,   sum);
        return   0;
}

int   f1(x   ,   i)         //分子   =   x^i;
{
        if(0   ==   i)         return   1;
        else   return   x   *   f1(x   ,   i   -   1);
}

int   f2(i)         //分母   =   i!;
{
        if(0   ==   i   ||   1   ==   i)         return   1;
        else         return   i   *   f2(i-1);
}

算过了,只有e^0   和   e^1   是准的,后面误差越来越大,e^9我的代码算出来是4759.818359,但正确答案是8103.08393,这也太……

单独每一项x^i/i!都是正确的,但是一加起来就不对了。

请教各位了。
PS:运行环境,MinGW   gcc   3.4.2,其他平台未测试,各位可帮忙测试一下。

[解决办法]
因为这个级数收敛速度比较慢

[解决办法]
double f1(double x , double i) ; //计算每项分子的值
double f2(double i); //计算每项分母的值

int main()
{
//printf( "请输入次方x: ");
double x=9;
//scanf( "%d ", &x);
int i;
double sum = 0; //每一项的值
for(i = 0; i <100; i++) //前十项和
{
sum = sum + f1(x, i) / f2(i);
}
printf( "e^%lf = %lf\n ", x, sum);
return 0;
}

double f1(double x , double i) //分子 = x^i;
{
if(0 == i) return 1;
else return x * f1(x , i - 1);
}
double f2(double i) //分母 = i!;
{
if(0 == i || 1 == i) return 1;
else return i * f2(i-1);
}

热点排行