 
View Full Version : [C] Errore con variabili di tipo double
Stallwars
23-01-2010, 12:33
Salve ragazzi! 
Ho scritto il seguente programma che calcola il valore di una funzione (in maniera molto grezza) con metodo iterativo.
Unico problema: i valori in uscita sono sballati anche se in teoria dovrebbe fungere... Vi posto qui il codice.
Confido in un vostro aiuto:
#include<stdio.h>
#include<math.h>
void main()
     {
           double x, Fx_prec, Fx_calc, DeltaStd, DeltaCalc;
           x=0.00001;
           Fx_calc=5*pow(2.7, x);
           DeltaStd=0.5*pow(10, -5);
           printf("%lf", DeltaStd);
                           do
                             {
                                   x+=0.10000;
                                   Fx_prec=Fx_calc;
                                   Fx_calc=5*pow(2.7, x);
                                   DeltaCalc=abs(Fx_prec-Fx_calc)/Fx_calc;
                              }
                           while(DeltaCalc<DeltaStd);
           printf("%lf\n", Fx_calc);
           system("PAUSE");
      }
Stallwars
23-01-2010, 16:14
prova a usare la stringa %g
Stessa cosa... il risultato ha addirittura due virgole!!! :muro: :muro:
Stessa cosa... il risultato ha addirittura due virgole!!! :muro: :muro: non esiste che la printf stampa un numero in virgola mobile con due virgole, saranno sicuramente due numeri stampati di seguito senza spazi che li separano! :)
infatti, se ci fai caso, il tuo codice ha due printf delle quali la prima non é conclusa ne' da uno spazio ne' da un newline, quindi di fatto stampi due numeri uno appresso all'altro. nella prima printf usa questo format string: "%lf " (nota lo spazio finale).
Stallwars
24-01-2010, 15:05
Che pirla... :muro: :muro: :muro: :muro: :muro: 
XD
Cmq qualcuno conosce il metodo esatto x limitare a un certo numero di cifre significative un numero float? Il prof dice k si usa l'errore relativo come in questo caso... Ma nn so bene come applicaro. :cry:
Cmq qualcuno conosce il metodo esatto x limitare a un certo numero di cifre significative un numero float? Il prof dice k si usa l'errore relativo come in questo caso... Ma nn so bene come applicaro. :cry: non so cosa sia l'errore relativo ma i format string della printf hanno una sintassi apposita. il format string deve avere la forma: "%.df"
dove al posto di d devi metterci il numero massimo di cifre decimali. per esempio, per stampare solo fino a 3 cifre decimali usa: "%.3f"
l'argomento deve essere un double peró, non un float.
Stallwars
24-01-2010, 15:54
NO a parte quello, intendo durante l'esecuzione di calcoli iterativi. Per rendere terminante un programma bisogna inserire sta condizione altrimenti se calcoli l'asintoto di una funzione ti conviene lasciare acceso il pc a vita e fare un mutuo x pagarti l'elettricitą... xD :mc:
ah, capito (almeno credo). allora per limitare un numero decimale ad avere al massimo n cifre decimali moltiplicalo per 10 alla n, poi troncalo ed infine ridividilo per 10 alla n; per esempio, per limitare a 3 cifre decimali moltiplica per 1000, tronca e ridividi per 1000. per troncare puoi usare la funzione floor in math.h.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.