我试图编写一个允许我评估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);
答案 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)