non capisco cosa tu voglia migliorare... l'algoritmo è la classica approssimazione di e^x in serie con MacLaurin, e non vedo alternative particolarmente vantaggiose...
si può fare qualcosa coi metodi di integrazione numerica, ma non mi pare molto coveniente... lo sviluppo in serie è sicuramente più veloce.
E anche come codice non mi pare così brutto... io lascerei com'è.
L'unica cosa che si potrebbe modificare è il controllo di precisione: invece di dare un numero MAX_N di iterazioni forse sarebbe preferibile controllare l'errore commesso (lo si fa col Resto di Lagrange). In questo caso il codice risulterebbe una cosa del tipo:
codice:#include <stdio.h> #define prec 0.001 //ad esempio... double abs(double x) { double a; if (x < 0) { a = -x; } else { a = x; } return(a); } long double exp(long double x){ int i; long double e, er; i = 0; e = 0; er = 1; while (abs(e - er) > prec) { e = e + (pow(x, i)/fct(i)); i++; er = pow(x, i)/fct(i); } return(e); }

Rispondi quotando