|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Dec 2009
Messaggi: 10
|
[C] Errore con variabili di tipo double
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: Codice:
#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"); } |
![]() |
![]() |
![]() |
#2 |
Junior Member
Iscritto dal: Dec 2009
Messaggi: 10
|
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
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).
|
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Dec 2009
Messaggi: 10
|
Che pirla...
![]() ![]() ![]() ![]() ![]() 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. ![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
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. |
|
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Dec 2009
Messaggi: 10
|
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
![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
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.
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:28.