Hay un problema con el factorial que si intentamos calcular factoriales muy grandes como por ejemplo 24! que llega a calcularse en ese programa que muestras, se produce un desbordamiento. El <num_terminos> muestra la precisión porque determina el número de términos que se van a calcular.
Además hay que tener en cuenta que los ángulos se pasan en radianes. Por lo que 10 radianes es mucho. Para que funcione correctamente hay que reducir el ángulo a la primera vuelta. Reduciendo un poco el número de términos para evitar el desbordamiento del factorial, ya salen resultados bastante bien aproximados.
// aproximacion del numero PI
const double PI = 3.141592;
long double coseno(double numero)
{
// reduce el angulo a la primera vuelta de forma simple
while(numero > 2*PI)
numero -= 2*PI;
long double cos=0;
int terminos=10, exponente=0;
for(size_t i = 0; i < terminos; i += 2, exponente++)
cos += pow(-1,exponente) * pow(numero,i)/factorial(i);
return cos;
}