Salve, devo fare una funzione che calcola il valore di e^x, con x numero naturale. L'algoritmo che ho fatto funziona bene fino a che la funzione potenza non mi restituisce valori incoerenti e la funzione parte, si fa per dire, per la tangente fino a che mi restituisce Inf.... Ho pensato che centri qualche overflow o problemi con il sistema in virgola mobile... Riuscireste ad aiutarmi a capire cosa non funziona e cosa succede di preciso? 
Eccovi il codice:
double exp(int x);
double power(double x, int y) {
	if (y == 0)
		return 1;
	double power = x;
	while (y > 1) {
		--y;
		power *= x;
	}
	return power;
}
int main(void) {
	double z = 8.2;
	int f = 3;
	double k;
	k = exp (f);
}
int factorial(int x) {
	if (x == 0)
		return 1;
	int factorial = x;
	for(int i = x-1; i > 1; --i) {
		factorial *= i;
	}
	return factorial;
}
double exp (int x) {
	double tmp = 1;
	double exponential = 0;
	for (int i = 0; exponential != tmp; ++i) {
		tmp = exponential;
		exponential += (power(x, i) / factorial(i));
	}
	return exponential;
	
}