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