用于评估e ^ x的C程序

时间:2017-01-14 09:24:57

标签: c exponential

我试图编写一个允许我评估e ^ x的C程序,但我不确定我是否在正确的轨道上。它似乎对较低的x值有效,但超过5可能会有太多错误。只是想知道是否有人能看到我的代码出错的地方(或者如果我的代码是正确的,那么可能是PC无法处理n的大值n的问题!)。

谢谢:-)

Wadeford

unsigned int counter1 = 1, counter2 = 1, counter3 = 1, num, numFactorial, X;
float e, ex, x;

printf( "%s", "Enter a number: ");
scanf( "%d", &num);

printf( "%s", "Enter a value for x: ");
scanf( "%f", &x);

e = e + 2;
counter3 = num;

while ( counter3 > 1 ) {

    counter1 = counter3;
    numFactorial = counter3;
    X = x;

    while( counter1 > 1 ) {
        numFactorial = numFactorial * ( counter3 - counter2);
        counter1--;
        counter2++;
        X = X * x;
    }    
    counter2 = 1;
    e = e + ( 1 / (float) numFactorial );
    ex = ex + X * ( 1 / (float) numFactorial );
    counter3--;
}    

ex = ex + x + 1;

printf( "e to the nth order of approximation (n = %d) is: %f", num, e);
printf( "\ne^x to the nth order of approximation (n = %d) is: %f", num, ex);

1 个答案:

答案 0 :(得分:1)

我刚刚尝试了你的代码,x = 3它可以达到num = 19(扩展中的第19顺序)。之后,数量与预期值不同。这是一个溢出的问题,你的数字太大了。

如果我理解正确,你想在两个系列扩展中获得Neper number的值和给定数字x的指数,直到给定的数量(num)。

你做那个计算阶乘数!在你的代码里面。 如果numfactorial是unsigned int,则这不适用于大于约15的数字。仅仅因为数字的表示。 至少使用双倍。

根据我的经验,当您需要计算因子时,如果您正在尝试做什么,请使用库中的Gamma Function" math.h"它被称为tgamma。 如果你看一下Gamma函数的维基百科页面,你可以用它来获得整数的阶乘:num! = tgamma(num + 1)