Решаю! с C (ошибка уравнения где-то) - PullRequest
0 голосов
/ 09 сентября 2011

В своем стремлении выучить C я столкнулся с задачей, которая вызывает у меня несколько проблем.Мне нужно составить уравнение для приближенного значения формул n !, которое можно описать так:

n!= n ^ n * e ^ (- n) * sqrt (2 (2 * n + 1/3) * PI), однако я просто не могу сопоставить свои значения с фактическим значением.5!= 120ish

Я могу получить значение около 148ish

Не могу понять, где мой код неверен:

#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 ]

13 голосов
/ 09 сентября 2011

3.14156 - неправильное значение для PI: лучше использовать 3.1416, или 3.14159, или 4 * atan(1), или, для реализаций POSIX, M_PI.

2.7828 - это очень плохое значение для e: лучше использовать 2.7183, или exp(1), или, для реализаций POSIX, M_E.

1/3 - целочисленное деление, результат 0: лучше использовать 1.0/3.

Также ваше приближение неверно. правильное приближение равно

n^n * e^(-n) * sqrt((2*n+1/3)*PI)
6 голосов
/ 09 сентября 2011

Кажется, вы попали в ловушку целочисленного деления с 1/3, который имеет значение 0. Вам нужно записать это с константами с плавающей точкой как 1.0 / 3.0.

1 голос
/ 09 сентября 2011

Вам, вероятно, нужно набрать 1.0/3.0, чтобы получить треть.

...