Pagina 1 di 1
					
				Algoritmo tosto!
				Inviato: 18 apr 2008, 20:27
				da Jean-Paul
				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  

 
			 
			
					
				
				Inviato: 19 apr 2008, 04:27
				da Tibor Gallai
				Manca un 3.
			 
			
					
				
				Inviato: 19 apr 2008, 17:57
				da Jean-Paul
				Dove mancherebbe il 3?
Potete darmi qualche dritta per la soluzione!
          Grazie
			 
			
					
				
				Inviato: 19 apr 2008, 19:06
				da Tibor Gallai
				Jean-Paul ha scritto:Dove mancherebbe il 3?
Nella formula che hai scritto nel 1° messaggio.
 
			 
			
					
				
				Inviato: 19 apr 2008, 20:42
				da antosecret
				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);
			 
			
					
				
				Inviato: 20 apr 2008, 07:10
				da Jean-Paul
				Proprio così!
                  Grazie e buona domenica.  

 
			 
			
					
				
				Inviato: 20 apr 2008, 10:29
				da pa
				attenzione ai fattoraili vanno in overflow che e' una meraviglia (e' il motivo per cui e' fortemente sconsigliato calcolare i binomiali con la farmula con i fattoriali).
Con gli interi ti devi fermare a 12! mentre con i long long a circa 23!...
			 
			
					
				
				Inviato: 09 set 2008, 19:29
				da gmascellani
				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!
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;
}
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.
 
			 
			
					
				
				Inviato: 09 set 2008, 22:25
				da fph
				gmascellani ha scritto:ci metto la mano sul fuoco che questo algoritmo è numericamente instabile.
Confermo che lo è, per x negativi.