解决n!用C(方程误差在某处)

时间:2011-09-09 09:57:52

标签: c math equation

在我学习C的过程中,我遇到了一个导致一些问题的任务。我需要为公式n!的近似值建立一个等式,可以描述为:

N! = n ^ n * e ^( - n)* sqrt(2(2 * n + 1/3)* PI),但是我根本无法将我的值与实际值进行核对。 5! = 120ish

我可以获得大约148的价值

无法弄清楚我的代码错误在哪里:

#include <stdio.h>
#include <math.h>

#define PI 3.14156
#define E_CONST 2.7828

int main ()
{

double num;
double calc, first, second, third, fourth;

printf("Give an int: ");
scanf("%lf", &num);


first = pow(num , num);

second = pow(E_CONST, -num);

third = (2 * num + 1/3);

fourth = sqrt(2*third*PI);

//calc = first * second * fourth;

calc = pow(num, num) * pow(E_CONST, -num) * sqrt(2*(2*num+(1/3))*PI);
printf("Input: %f", num);

printf("1: %.2f\n2: %.10f\n3: %.8f\n4: %.2f\n", first, second, third, fourth);

printf("\nInt was: %.2f\n\nApproximate number: %.5f", num, calc);

return 0;
}

感觉我已经尝试了一切。代码有点混乱,但这是因为我现在已经乱用了它。

3 个答案:

答案 0 :(得分:13)

3.14156对于PI来说是一个糟糕的值:最好使用3.14163.141594 * atan(1),或者,对于POSIX实现,{ {1}}。

M_PI2.7828非常糟糕的值:最好使用e2.7183,或者对于POSIX实现, exp(1)

M_E是整数除法,结果为0:最好使用1/3

此外,您的近似值也不正确。 correct approximation

1.0/3

答案 1 :(得分:6)

您似乎陷入了1/3的整数除法陷阱,其值为0。您需要将浮点常量写为1.0 / 3.0

答案 2 :(得分:1)

您可能需要输入1.0/3.0才能获得三分之一。