c语言中的斯特林逼近
Stirling's approximation in c language
我正在尝试用 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的答案是正确的。
我觉得跟主函数调用逼近函数有关系。我知道这一定是一个如此简单的错误,但我一整天都在努力解决这个问题!谁能帮帮我?
谢谢!
您错误地实施了阶乘方法
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;
}
我还将 return 值从 int
更改为 long int
。
我正在尝试用 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的答案是正确的。
我觉得跟主函数调用逼近函数有关系。我知道这一定是一个如此简单的错误,但我一整天都在努力解决这个问题!谁能帮帮我?
谢谢!
您错误地实施了阶乘方法
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;
}
我还将 return 值从 int
更改为 long int
。