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.
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.
Código (cpp) [Seleccionar]
// 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;
}