Algoritmo tosto!
Algoritmo tosto!
Come posso scrivere in linguaggio di progetto l’algoritmo per calcolare il valore di e^x usando la formula:
e^x = 1 + x/1! + x^2/2! + x^/3! + …
Grazie
e^x = 1 + x/1! + x^2/2! + x^/3! + …
Grazie
-
- Messaggi: 1776
- Iscritto il: 17 nov 2007, 19:12
-
- Messaggi: 214
- Iscritto il: 01 gen 1970, 01:00
- Località: Catania
Se ho capito bene (spero) ti serve una funzione che calcoli:
ris = 1 + x^1/1! + x^2/2! +.... + x^k/k!
ho messo k come finale perchè se no andresti avanti all'infinito...... k definisce il grado di precisione
Allora potresti fare così: definite le funzioni
int potenza(int base, int esponente)
int fattoriale(int numero)
la somma diventa
risultato = 1
for(contatore =0;contatore <k; contatore++)
risultato = risultato + potenza(x,contatore+1)/fattoriale(contatore+1);
ris = 1 + x^1/1! + x^2/2! +.... + x^k/k!
ho messo k come finale perchè se no andresti avanti all'infinito...... k definisce il grado di precisione
Allora potresti fare così: definite le funzioni
int potenza(int base, int esponente)
int fattoriale(int numero)
la somma diventa
risultato = 1
for(contatore =0;contatore <k; contatore++)
risultato = risultato + potenza(x,contatore+1)/fattoriale(contatore+1);
-
- Messaggi: 5
- Iscritto il: 01 gen 1970, 01:00
- Località: Pisa
- Contatta:
In ogni caso hai un algoritmo quadratico mentre lo potresti fare lineare. Ok, è comunque pseudo-polinomiale, ma non è un buon motivo per tirarsi la zappa sui piedi!
Ovviamente non ho testato il codice.
Usando i double (tanto il risultato mica te lo trovi intero!) hai anche meno problemi di overflow, ma ci metto la mano sul fuoco che questo algoritmo è numericamente instabile.
Codice: Seleziona tutto
double ex(double x, int k) {
double res = 1.0, fatt = 1.0, pow = 1.0;
int i;
for (i = 1; i <= prec; i++) {
fatt *= i;
pow *= x;
res += pos / fratt;
}
return res;
}
Usando i double (tanto il risultato mica te lo trovi intero!) hai anche meno problemi di overflow, ma ci metto la mano sul fuoco che questo algoritmo è numericamente instabile.