Uno de los problemas que te pueden surgir radica en que el número de sumandos, que tienes fijado en 20, varía con el valor de x, a mayor valor más sumandos. Así, por ejemplo, para x = 10 tendrías que tomar para una buena aproximación 30 sumandos. Una forma de contemplar este hecho sería ir comparando el valor de "e" actual con el anterior y si es menor que un valor de precisión que fijas tú se aborta el sumatorio.
¿He dicho 30?. Pues sí. Basta con declarar las dos funciones y a la variable "fact" como double.
Y una cosita curiosa, puedes prescindir de la librería math, que por cierto en C++ es más correcto poner <cmath> que <math.h> (que es más propio de C), así como de la función "pow "mediante una variable estática, esas que conservan su valor entre las distintas llamadas a la función. Algo como:
Código C++:
Ver originaldouble exponencial( double x , int n ) {
static double poW = 1 ;
exp = poW
/ factorial
( n
); poW *= x ;
}
¡¡¡Saluditos!!!