Я написал программу на C, которая должна вычислять и печатать приближение e^x для всех значений до 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
Я не могу найти проблему в моем коде. Я посмотрел на некоторый псевдокод для функций факториала и мощности, и ничего не выделяется. Мои результаты по-прежнему ошибочны. Есть предположения?
Повторное вычисление факториала снова и снова наивно и дорого. – duffymo
С вашего вывода, похоже, что 'sum' увеличивается на 1 каждый раз после шага 9. Можете ли вы проверить это, введя' n' not 10, но скажите 13-15 и посмотрите, поддерживает ли это? –
И хм я не могу воспроизвести с вашим кодом, выход отличается: на [ideone] (http://ideone.com/Bok1D8). –