In C++ (o forse solo i nostri compilatori VC8 e VC10)3.14
è un doppio letterale e 3.14f
è un valore letterale float.Dovremmo generalmente usare i letterali float per i float invece dei doppi letterali più semplici?
ora ho un collega che ha dichiarato:
Dovremmo usare float-letterali per i calcoli float e double-letterali per i doppi calcoli come questo potrebbe avere un impatto sulla precisione di un calcolo quando vengono utilizzate le costanti in un calcolo.
In particolare, credo che volesse dire:
double d1, d2;
float f1, f2;
... init and stuff ...
f1 = 3.1415 * f2;
f1 = 3.1415f * f2; // any difference?
d1 = 3.1415 * d2;
d1 = 3.1415f * d2; // any difference?
Oppure, aggiunto da me, anche:
d1 = 42 * d2;
d1 = 42.0f * d2; // any difference?
d1 = 42.0 * d2; // any difference?
Più in generale, il punto unica posso vedere per l'utilizzo 2.71828183f
è per assicurarmi che la costante che sto cercando di specificare si inserisca effettivamente in un float (errore/avviso del compilatore in caso contrario).
Qualcuno può far luce su questo? Specifica il suffisso f
? Perché?
citare una risposta quello che implicitamente dato per scontato:
Se si lavora con una variabile float e un doppio letterale tutta operazione sarà fatto come doppio e poi convertito torna a galleggiare .
Potrebbe esserci qualche danno in questo? (Altro che un impatto molto, molto teorico prestazioni?)
Ulteriori edit: Sarebbe bello se le risposte che contengono dettagli tecnici potrebbero includere anche come queste differenze influenzano codice general purpose (apprezzato!). (Sì, se stai facendo il numero, probabilmente ti piace assicurarti che le tue operazioni in virgola mobile più grandi siano efficienti (e corrette) il più possibile - ma è importante per il codice di uso generale che viene chiamato un paio di volte? t pulito se il codice usa solo 0.0
e salta il suffisso - difficile da mantenere! - float?)
Un esempio è qui: http://ideone.com/r8K2c –