Я пытаюсь написать код 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 правильно.
Я думаю, что это как-то связано с вызовом функции аппроксимации от основной функции. Я знаю, что это должна быть такая простая ошибка, но я пытался исправить это в течение всего дня! Может ли кто-нибудь помочь мне?
Спасибо!
Вы можете использовать #include и использовать M_PI вместо приблизительно pi –
@SvenBorden: 'M_PI' является нестандартным. – Olaf