斯特林在c语言中的近似

时间:2015-11-01 13:28:30

标签: c approximation

我正在尝试用C编写代码来计算斯特林近似值从1到12的精确度。

这是我的代码:

#define PI 3.1416
#define EULERNUM 2.71828

float stirling_approximation(int n) {
    int fact;
    float stirling, ans;

    fact = factorial(n);
    stirling = sqrt(2.0*PI*n) * pow(n / EULERNUM, n);
    ans = fact / stirling;

    return ans;
}

int factorial(int input) {
    int i;
    int ans = 0;

    for (i = 1; i <= input; i++)
        ans += i;
    return ans;
}

int main(void) {
    int n;
    printf(" n\t Ratio\n");
    for (n = 1; n <= 12; n++) {
        printf("n: %2d\t %f\n", n, stirling_approximation(n));
    }

    return 0;
}

我正确地得到了递归计算,但是我的斯特林的近似方法值很接近。更令人费解的是,n = 1,3的答案是正确的。

我认为它与从main函数调用逼近函数有关。我知道这一定是一个如此简单的错误,但我一直试图解决这个问题!有人可以帮帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您错误地实施了阶乘方法

    with open(fname) as infile:
        outfile.write(infile.read())
    outfile.write("\n\n")

应该是

int factorial(int input) {
    int i;
    int ans = 0;

    for (i = 1; i <= input; i++)
        ans += i;
    return ans;
}

我还会将返回值从int factorial(int input) { int i; int ans = 1; for (i = 2; i <= input; i++) ans *= i; return ans; } 更改为int