如何修复我的e ^ x近似C程序?

时间:2017-02-20 16:44:12

标签: c function math output

我编写了一个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

我似乎无法在我的代码中找到问题。我已经看了一些用于阶乘和幂函数的伪代码,没有什么突出的。我的结果仍然是错误的。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

有两个问题:

  1. exponent功能中,您不会初始化sum
  2. 您的factorial功能错误。
  3. 如果您单独测试了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;
}