View Full Version : [C] Errore con variabili di tipo double
Stallwars
23-01-2010, 11: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, 15: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, 14: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, 14: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.