Oppure

Loading
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è.
/*  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?:hail:
Ultima modifica effettuata da pierotofy 22/12/09 16:12
aaa
22/12/09 1:14
Xaratroom
#IND00 -> Non è un valore valido per un double
#INF00 -> Non è un valore valido per un float

Controlla che il tuo programma non esegua divisioni per zero o altre operazioni farlocche in R
Ultima modifica effettuata da Xaratroom 22/12/09 18:36
aaa