Помогите пожалуйста. Не понимаю как записать факториал

0 < |x| < 1
Допустим x = 0.66
k = 0 

делимое я расписал вот так - pow(x, 2k)
а вот делитель я хз как расписать. Я пробовал факториал закодить 
через функцию, но 
ничего не получилось. Помогите пожалуйста реализовать (2k)! 

само задание


Ответы (1 шт):

Автор решения: LShadow77

А что тут понимать? Пусть t(k) - k-й член ряда (выражение под суммой):

t(k) = x^(2k) / (2k)!

Здесь ^ - возведение в степень. Тогда (k+1)-й член ряда:

t(k+1) = x^(2(k+1)) / (2(k+1))! 
       = x^(2k+2) / (2k+2)! 
       = x^(2k) * x^2 / [(2k)!(2k+1)(2k+2)] 
       = t(k) * x^2 / [(2k+1)(2k+2)]

0-й член ряда:

t(0) = x^(2*0) / (2*0)! = 1

Отсюда можем построить код:

double get_sum(double x, double epsilon, uint64_t max_count)
{
    double s = 1;
    double t = 1;
    double x2 = x*x;

    for (uint64_t k = 0; (k < max_count) && (abs(t) > epsilon); ++k)
    {
        uint64_t k2 = k + k + 1;
        t*= x2/k2/(k2+1);
        s+= t;
    }

    return s;
}

Т.е., явно возводить в степень и считать факториал в каждом цикле не нужно и не правильно - это очень медленно. Подобные ряды считаются на основе реккурентного соотношения выражения под суммой.

→ Ссылка