PDA

View Full Version : [C] Cast double float


Unrue
09-07-2008, 13:00
Salve,
ho un dubbio su questo tipo di cast. Siccome ho un programma che scrive i risultati in un file binario, ma tali risultati prima li casta da double a float, siamo sicuri che ogni volta che tronca in double dia esattamente lo stesso risultato ? Inoltre prima tali valori li mette in una funzione sin(atan(x))

Perché il binario mi viene differente ogni volta :mbe:

wingman87
09-07-2008, 13:33
Non ho ben capito il cast che fai, se fai un cast da float a double non ci sono perdite di dati, se fai il contrario invece possono esserci

Unrue
09-07-2008, 13:44
Non ho ben capito il cast che fai, se fai un cast da float a double non ci sono perdite di dati, se fai il contrario invece possono esserci

Da double a float. So che possono esserci perdite di dati, ma quello che mi chiedevo è se tali perdite sono sempre le stesse o possono variare.

wingman87
09-07-2008, 15:17
Se il numero è sempre lo stesso la perdita deve essere sempre uguale, se i numeri sono diversi le perdite saranno differenti, potrebbero anche non esserci per alcuni numeri

!k-0t1c!
11-07-2008, 20:48
Dato lo stesso input e lo stesso codice eseguibile anche le perdite saranno costanti pur ripetendo una data operazione N volte. Dunque se salvando un double x si ottiene un float che ad esempio vale x - FLT_EPSILON, ciò non vuol dire che salvando un double y il valore salvato varrà y - FLT_EPSILON, ma salvando 10 volte un double x castato a float (effettuando il casting ad ogni salvataggio) si salverà 10 volte lo stesso float. Bisogna comunque considerare che lo stesso sorgente C(++) può essere compilato in diversi modi, e la modifica di un'impostazione di ottimizzaizione può cambiare la precisione delle operazioni in virgola mobile se applicata al codice che li usa. In sostanza è da considerarsi *VIETATO* salvare dati in maniera approssimata rispetto all'uso che se ne fa all'interno del programma (se hai un double salvarlo come float etc).

DanieleC88
12-07-2008, 01:06
Dato lo stesso input e lo stesso codice eseguibile anche le perdite saranno costanti pur ripetendo una data operazione N volte. Dunque se salvando un double x si ottiene un float che ad esempio vale x - FLT_EPSILON, ciò non vuol dire che salvando un double y il valore salvato varrà y - FLT_EPSILON, ma salvando 10 volte un double x castato a float (effettuando il casting ad ogni salvataggio) si salverà 10 volte lo stesso float. Bisogna comunque considerare che lo stesso sorgente C(++) può essere compilato in diversi modi, e la modifica di un'impostazione di ottimizzaizione può cambiare la precisione delle operazioni in virgola mobile se applicata al codice che li usa. In sostanza è da considerarsi *VIETATO* salvare dati in maniera approssimata rispetto all'uso che se ne fa all'interno del programma (se hai un double salvarlo come float etc).
Analisi interessante, ma... non bastava un "sì"? :D