我编写了一个C程序,它应该为所有n值计算和打印e ^ x的近似值。我正在使用这个等式来实现我的程序。
f(x,n)= e ^ x = i = 0的总和,直到n = x ^ i / x! = x ^ 0/0! + x ^ 1/1! + X ^ 2月2日! + .... + x ^ n / n!
这是我的代码:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double factorial(int n){
double fac =1;
int i;
for(i =1; i <= n; i++){
fac *=n;
}
return fac;
}
double exponent(double x, int n){
double sum, i;
for(i = 0; i <=n; i++){
sum += (pow(x, i)/ factorial(i));
}
return sum;
}
int main(int argc, char *argv[]){
int n = atoi(argv[1]);
double x = atof(argv[2]);
printf("\ti\tApproximantion\n");
printf("-------------------------------------\n");
int i;
for(i =0; i <=n; i++){
printf("\t%d\t%f\n", i, exponent(x,i));
}
printf("Exact Value =\t%12f\n", exp(x));
return 0;
}//main
我使用迭代而不是递归。
我使用./aprroximation 10 2.2
的当前输出是:
i Approximation
-------------------------------------
0 1.000000
1 3.200000
2 4.410000
3 4.804370
4 7.895877
5 8.912368
6 9.914798
7 10.915101
8 11.915134
9 12.915137
10 13.915137
Exact Value = 9.025013
输出应为:(忽略空格/标签)
i Approximation
--------------------------------
0 1.0000000000
1 3.2000000000
2 5.6200000000
3 7.3946666667
4 8.3707333333
5 8.8002026667
6 8.9576747556
7 9.0071659835
8 9.0207760712
9 9.0241029815
10 9.0248349018
Exact Value = 9.0250134994
我似乎无法在我的代码中找到问题。我已经看了一些用于阶乘和幂函数的伪代码,没有什么突出的。我的结果仍然是错误的。有什么想法吗?
答案 0 :(得分:5)
有两个问题:
exponent
功能中,您不会初始化sum
factorial
功能错误。如果您单独测试了factorial
功能,那么您至少可以轻易找到问题。
答案 1 :(得分:3)
我知道,你没有在sum
函数中初始化变量exponent()
。将其初始化为零,否则exponent()
函数看起来没问题。
double exponent(double x, int n){
double sum = 0, i;
for(i = 0; i <=n; i++){
sum += pow(x, i)/ factorial(i);
}
return sum;
}
<强>更新强>
我在factorial()
函数中发现了另一个问题。试想一下,for
循环中的语句是否正确!
for(i=1; i<=n; i++){
fac *= n;
}
您在此处计算的不是n!
,而是n^n
。您应该执行以下操作。
for(i=1; i<=n; i++){
fac *= i;
}