Советую почти полностью переписать код, хорошенько его оптимизировав. Например бессмысленно находить каждый раз 2^(2n+1), зная значение 2^(2n-1). Тоже самое для факториала.
В итоге нахождение косинуса поместится в 1 цикл и для определения достижения необходимой точности не понадобится 2жды вызывать две довольно затратные функции.
UPD. И в этом условии:
abs(f(n,sum)-f(n+1,sum))<epsilon
должен стоять знак больше
UPD2. для double и float лучше использовать функцию
double fabs (double x);
float fabs (float x);
long double fabs (long double x);
UPD3. По поводу оптимизации, я имел в виду нечто такое:
double sin(double x, double EPS) {
double result = x;
double delta = x;
for (int n=1; fabs(delta)>EPS; n++) {
delta *= x/(2*n)*x/(2*n+1);
delta *= -1;
result+=delta;
}
return result;
}
double cosec(double x, double EPS) {
return 1.0f/sin(x, EPS);
}