Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - cos'è 1inf00
Forum - C/C++ - cos'è 1inf00

Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 17:13
Lunedì, 21/12/2009
Scusate quando compilo questo programma come risultato mi stampa 1.#INF00 (oppuere
1.#IND00), ma non capisco il perchè.
Codice sorgente - presumibilmente C/C++

  1. /*  QUESTO PROGRAMMA REALIZZA UN'APPROSSIMAZIONE POLINOMIALE DELLA FUNZIONE
  2.     exp(x) CHE SIA ACCURATA ENTRO LA TOLLERANZA e ACQUISITA DA TASTIERA PER
  3.     OGNI x DA -INFINITO A +INFINTO. STABILIRE A PRIORI IL NUMERO DI TERMINI
  4.     NECESSARI PER RENDERE UNA MAGGIORAZIONE DEL MODULO DELL'ERRORE ASSOLUTO
  5.     INFERIORE A e.                                                    
  6.                                                         [Polinomio di Taylor] */
  7.    
  8. # include <stdlib.h>
  9. # include <stdio.h>
  10. # include <math.h>
  11.  
  12. void presentazione(void);
  13. void leggi_x(double&);
  14. double leggi_e(double);
  15. void appexp(double,double);  
  16. double fatt(double);
  17. double modulo(double);
  18.  
  19. int main(void)
  20. {
  21.     double x, e;
  22.    
  23.     presentazione();
  24.     leggi_x(x);
  25.     e=leggi_e(e);
  26.     appexp(x,e);
  27.    
  28.     printf("\n\n\n\n");
  29.     system("PAUSE");
  30.     return 0;
  31. }
  32.  
  33. /* Presentazione del programma */
  34. void presentazione()
  35. {
  36.      printf("* QUESTO PROGRAMMA REALIZZA UN'APPROSSIMAZIONE POLINOMIALE DELLA FUNZIONE   *");
  37.      printf("\n* exp(x) CHE SIA ACCURATA ENTRO LA TOLLERANZA e ACQUISITA DA TASTIERA PER   *");
  38.      printf("\n* OGNI x REALE                                                              *");
  39.      return;
  40. }
  41.  
  42. /* Acquisisce il numero x */
  43. void leggi_x(double& x)
  44. {
  45.      printf("\n\nInserisci il numero x:          x = ");
  46.      scanf("%lf",&x);
  47.      
  48.      return;
  49. }
  50.  
  51. /* Acquisisce da tastiera la tolleranza */
  52. double leggi_e(double e)
  53. {
  54.      printf("\n\nInserisci la precisione (tolleranza):                e = ");
  55.      scanf("%lf",&e);
  56.      return e;
  57. }
  58.  
  59. /* Crea il polinomio di Taylor per la funzione con il dato x */
  60. void appexp(double x, double e)
  61. {                                                     // Il polinomio di Taylor per exp(x) è:
  62.      double delta, exp=(1+x), k1=1, pot=x, rho;       // exp(x)=1 + x + x^2/2! + x^3/3! + x^4/4!
  63.      int k2=1, cont;
  64.      
  65.      do {                    // Calcolo a priori delle iterate
  66.            rho=fatt(k1);
  67.            rho=(M_E)/rho;
  68.            k1++;
  69.         }
  70.      while(rho>e);
  71.      
  72.      for(cont=1; cont<=k1; cont++)
  73.         {              
  74.            k2++;  k2=fatt(k2);
  75.            pot*=x;              // si crea x^2, x^3, x^4...
  76.            delta=pot/(float)k2; // si crea x^2/2!, x^3/3!...
  77.            exp+=delta;          // si fa 1+x-x^2/2
  78.         }
  79.      
  80.      printf("\n\n\nL'approssimazione e':                  x = %lf        (k = %d)",exp,cont);
  81.      return;
  82. }
  83.  
  84. /* Prende il valore assoluto */
  85. double modulo(double a)
  86. {
  87.      if(a>=0)   return a;
  88.  
  89.      else       return -a;
  90. }
  91.  
  92. /* Crea il fattoriale */
  93. double fatt(double k)
  94. {
  95.      int fatt=1;
  96.      for (int i=1; i<=k; i++)
  97.          fatt*=i;
  98.        
  99.      return fatt;
  100. }


Qualcuno mi aiuta?:hail:

Ultima modifica effettuata da pierotofy il 22/12/2009 alle 17:12


...La saggezza di un singolo somiglia ad un albero conficcato alla meno peggio nel terreno...( HAGAKURE, codice 15)
PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 2:14
Martedì, 22/12/2009
#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 il 22/12/2009 alle 19:36


bool Woman::makeYourselfBetter() {
       goto bathroom;

bathroom:
       while (1);

       return this->_isGoodResult();
}
PM Quote