Serie esponenziale (c++)

di il
5 risposte

Serie esponenziale (c++)

Salve a tutti,
sono un nuovo iscritto. Vi vorrei proporre l'esercizio che sto facendo in questi giorni ovvero l'implementazione della serie esponenziale mediante l'introduzione di N(numero delle somme parziali che voglio calcolare) e x. La formula ,se non la ricordate,la trovate facilmente su wiki.
Il programma è funzionante(sto usando Dev c++) ma ,se potete, osservate che succede per N>34. Mi potreste dire come mai e come risolvere?ecco il programmino:

#include <iostream.h>
#include <stdlib.h>
#include <cmath>
#include <iomanip>

int main()
{
int N,n;
float p;
float sum,i,x;





cout<<"dammi N e x\n";
cin>>N>>x;


sum = 1;
cout<<"\n\n";

cout<<setw(4)<<"i"<<setw(16)<<"fattoriale"<<setw(16)<<"potenza"<<setw(16)<<"termine n-esimo"<<setw(12)<<"sum"<<setw(14)<<"exp(x)"<<endl;

for (i=1;i<=N;i++){

p=1;
for(n=1;n<=i;n++){
p=p*n;

}
sum = sum + (pow(x,i)/p) ;


cout<<setw(4)<<i<<setw(16)<<p<<setw(16)<<pow(x,i)<<setw(16)<<(pow(x,i)/p)<<setw(12)<<sum<<setw(14)<<exp(x)<<endl;
}
system("PAUSE");
return 0;
}

5 Risposte

  • Re: Serie esponenziale (c++)

    Premettendo che non sò a che serva e cosa sia la libreria iomanip e che i cout non li ho guardati e che non ho fatto girare il programma, dico quanto segue: sostituire il tipo float con double.
    Ora il perché a grandi linee: il tipo float ha una determinata precisione numerica (che non ricordo); per N>34 viene oltrepassata quella precisione e quindi i valori restituiti sono erronei. Entra così in gioco la doppia precisione double. E' un problema di numeri.
  • Re: Serie esponenziale (c++)

    Ah ecco..hai ragione:ho cambiato il tipo di variabile passando da float a double e funziona.In effetti avrei anche dovuto saperlo.Grazie mille per la risposta !!
  • Re: Serie esponenziale (c++)

    Comunque da quello che ho capito la libreria iomanip bisogna includerla per poter utilizzare funzioni tipo "setw()" che servono per la formattazione dei dati quando vengono mandati in uscita con cout. Ad esempio setw(4) ,che sta per "set width",cioè "stabilisci una larghezza", si può usare per stampare i dati in uscita a partire dal carattere 4,da destra.
  • Re: Serie esponenziale (c++)

    edmondantes ha scritto:


    comunque da quello che ho capito la libreria iomanip bisogna includerla per poter utilizzare funzioni tipo "setw()" che servono per la formattazione dei dati quando vengono mandati in uscita con cout. Ad esempio setw(4) ,che sta per "set width",cioè "stabilisci una larghezza", si può usare per stampare i dati in uscita a partire dal carattere 4,da destra.
    ah! grazie. Mi hai incuriosito. La cercherò sul libro per studiarla.
  • Re: Serie esponenziale (c++)

    La libreria iomanip serve per la manipolazione dell'input/output e informazioni più approfondite si possono trovare qui.
Devi accedere o registrarti per scrivere nel forum
5 risposte