Одна вещь, которую я вижу, заключается в том, что ваш цикл for внутри main работает только через 2 настоящие итерации, один раз для i == 0 и снова для i == 1.
Для расширения taylor для работы довольно эффективно, его нужно запускать через более последовательности (больше итераций цикла).
другое, что я вижу, это то, что ваш знаменатель является n! а не (2 * n)!
Для эффективности я мог бы также реализовать факториальную процедуру следующим образом:
unsigned int factorial(int n){
unsigned int product = 1;
for(int I = 1; I <= n; I++) product *= I;
return product;
}
Вышеупомянутая факториальная процедура предназначена для более точного факториала, которые, возможно, вам не нужны для этой цели. Для ваших целей, возможно, вариант с плавающей точкой может быть достаточно хорошим.
float factorial(int n){
float product = 1;
for(int I = 1; I <= n; I++) product *= (float)I;
return product;
}
Также я должен отметить, почему я заявляю, что выполняю факториал таким образом. В общем случае конструкция цикла будет более эффективной, чем ее рекурсивная копия. Ваша текущая реализация рекурсивна, и, таким образом, реализация, которую я предоставляю, ДОЛЖНА быть более эффективной как от производительности, так и от использования памяти.