根据公式写的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);
}