【发布时间】:2017-07-10 01:12:48
【问题描述】:
我编写了一个 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
我似乎无法在我的代码中找到问题所在。我查看了阶乘函数和幂函数的一些伪代码,但没有什么特别突出的。我的结果仍然是错误的。有什么想法吗?
【问题讨论】:
-
一遍又一遍地重新计算阶乘是幼稚且昂贵的。
-
从您的输出看来,
sum在第 9 步之后每次都增加 1。您能否通过输入n而不是 10 而是输入 13-15 来检查这一点,看看是否如此持有? -
嗯,我无法用你的代码重现,输出不同:ideone。
-
@duffymo 当然它很贵,但这看起来更像是一个练习。一旦它工作了,还有时间进行优化,但无论如何,在现实世界中,我们不需要该代码,因为我们只需使用
exp函数。 -
我认为应该教学生正确编码和思考。