Помогите пожалуйста. Не понимаю как записать факториал
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;
}
Т.е., явно возводить в степень и считать факториал в каждом цикле не нужно и не правильно - это очень медленно. Подобные ряды считаются на основе реккурентного соотношения выражения под суммой.
