21/12/09 16:13
zaire90
Scusate quando compilo questo programma come risultato mi stampa 1.#INF00 (oppuere
1.#IND00), ma non capisco il perchè.
Qualcuno mi aiuta?
1.#IND00), ma non capisco il perchè.
/* QUESTO PROGRAMMA REALIZZA UN'APPROSSIMAZIONE POLINOMIALE DELLA FUNZIONE exp(x) CHE SIA ACCURATA ENTRO LA TOLLERANZA e ACQUISITA DA TASTIERA PER OGNI x DA -INFINITO A +INFINTO. STABILIRE A PRIORI IL NUMERO DI TERMINI NECESSARI PER RENDERE UNA MAGGIORAZIONE DEL MODULO DELL'ERRORE ASSOLUTO INFERIORE A e. [Polinomio di Taylor] */ # include <stdlib.h> # include <stdio.h> # include <math.h> void presentazione(void); void leggi_x(double&); double leggi_e(double); void appexp(double,double); double fatt(double); double modulo(double); int main(void) { double x, e; presentazione(); leggi_x(x); e=leggi_e(e); appexp(x,e); printf("\n\n\n\n"); system("PAUSE"); return 0; } /* Presentazione del programma */ void presentazione() { printf("* QUESTO PROGRAMMA REALIZZA UN'APPROSSIMAZIONE POLINOMIALE DELLA FUNZIONE *"); printf("\n* exp(x) CHE SIA ACCURATA ENTRO LA TOLLERANZA e ACQUISITA DA TASTIERA PER *"); printf("\n* OGNI x REALE *"); return; } /* Acquisisce il numero x */ void leggi_x(double& x) { printf("\n\nInserisci il numero x: x = "); scanf("%lf",&x); return; } /* Acquisisce da tastiera la tolleranza */ double leggi_e(double e) { printf("\n\nInserisci la precisione (tolleranza): e = "); scanf("%lf",&e); return e; } /* Crea il polinomio di Taylor per la funzione con il dato x */ void appexp(double x, double e) { // Il polinomio di Taylor per exp(x) è: double delta, exp=(1+x), k1=1, pot=x, rho; // exp(x)=1 + x + x^2/2! + x^3/3! + x^4/4! int k2=1, cont; do { // Calcolo a priori delle iterate rho=fatt(k1); rho=(M_E)/rho; k1++; } while(rho>e); for(cont=1; cont<=k1; cont++) { k2++; k2=fatt(k2); pot*=x; // si crea x^2, x^3, x^4... delta=pot/(float)k2; // si crea x^2/2!, x^3/3!... exp+=delta; // si fa 1+x-x^2/2 } printf("\n\n\nL'approssimazione e': x = %lf (k = %d)",exp,cont); return; } /* Prende il valore assoluto */ double modulo(double a) { if(a>=0) return a; else return -a; } /* Crea il fattoriale */ double fatt(double k) { int fatt=1; for (int i=1; i<=k; i++) fatt*=i; return fatt; }
Qualcuno mi aiuta?
Ultima modifica effettuata da pierotofy 22/12/09 16:12
aaa