[C] Calcolo dell'esponenziale

jarrod
Ho questo esercizio: Creare i file matematica.h e matematica.c che consentano di utilizzare la seguente funzione:
extern double exp (double x);

La funzione deve calcolare il valore di $e^x$ utilizzando la seguente equazione: $\sum_{n=0}^(+oo) (x^n)/(n!)$
Nella formula l’iterazione prosegue fino all’infinito, ma nella pratica potete fare un numero limitato di iterazioni, ad esempio in questo caso fate 10 iterazioni.

io ho fatto questo programma:
file main.c

#include"matematica.h"
#include<math.h>

int main(){


	double x = exp(2);

	


	return 0;
}

file matematica.c:
#include "matematica.h"
#include<math.h>

double exp(double x){

	int n;
	double ris = 0;
	for (n = 0; n < 10; n++){ //La consegna dice 10 iterazioni

		ris += (pow(x, n)) / (fattoriale(n));

	}

	return ris;
}

unsigned int fattoriale(unsigned char val){

	int f = 1;

	while (val > 0){
		f = f*val;
		val--;
	}

	return f;
}


file matematica.h
#if !defined MATEMATICA_H
#define MATEMATICA_H


extern double exp(double x);
extern unsigned int fattoriale(unsigned char val);

#endif


Non capisco per quale motivo nel caso in cui devo calcolare $e^2$, mi viene un risultato corretto, ma invece se faccio ad esempio il calcolo di $e^9$ mi viene un risultato strano che si allontana da quello corretto. Qualcuno mi può segnalare l'errore?

Risposte
apatriarca
Non ho guardato il codice ma l'errore del metodo cresce abbastanza velocemente con la distanza dall'origine. In effetti, secondo Wolfram Alpha, la differenza dopo dieci iterazione con \(x=9\) è di circa \(2382\)..

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.