我已經寫了一個C程序,它應該計算和打印所有n值的e^x的近似值。我正在使用這個等式來實現我的程序。如何解決我的e^x逼近C程序?
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
輸出應爲:(忽略空格/ Tab鍵)
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
我似乎無法找到我的代碼的問題。我已經看了一些僞代碼的階乘和權力的功能,沒有什麼突出的。我的結果仍然是錯誤的。有什麼想法嗎?
一遍又一遍地重新計算階乘是幼稚和昂貴的。 – duffymo
從你的輸出看起來,似乎每次在步驟9之後'sum'都會加1。你可以通過輸入'n'而不是10來代替13,看看它是否成立? –
嗯,我不能用你的代碼重現,輸出不同:在[ideone](http://ideone.com/Bok1D8)上。 –