Come un adoratore di John Carmack, leggevo pubblicamente disponibili documento convenzioni di codifica di Id Tech (a ftp://ftp.idsoftware.com/idstuff/doom3/source/CodeStyleConventions.doc se siete interessati), e sono imbattuto in una convenzione non ho del tutto capito:Qual è la differenza tra "1.0f" e "1.f"?
Usa precisione specifica per i valori in virgola mobile a meno che non vi sia un'esigenza esplicita per un doppio.
float f = 0.5f
Invece di
float f = 0.5;
E
float f = 1.0f;
Invece di
float f = 1.f;
Come sono diversi?
Riesco a capire la differenza tra i due nel primo esempio (quest'ultimo fa una conversione double-to-float sotto il cofano), anche se sospetto che abbia bisogno solo di un compilatore non stupido da catturare e che produrrebbe lo stesso bytecode, senza differenze di runtime.
Ma ci sono casi in cui l'aggiunta di 0 di trailing alla dichiarazione del valore in virgola mobile cambia le cose?
Sembra più un errore di battitura nel contesto, poiché entrambi hanno una specifica di precisione. 1.0f è ancora più leggibile, però. –
L'autore probabilmente intendeva suggerire 'float f = 1.0f;' invece di 'float f = 1.0;'; la presenza o l'assenza del suffisso 'f' è il punto. (E di solito è meglio usare 'double' piuttosto che' float' in ogni caso.) –
Un buon compilatore dovrebbe avvisare se si inizializza una 'float' con' double' costante il cui valore cambia quando viene convertito in 'float', ma non dovrebbe , di regola, produrre lo stesso codice come se la costante fosse stata suffissa con 'f'. Questo perché ci sono alcuni numeri che sono diversi quando vengono prima convertiti in 'double' e poi in' float' rispetto a quando sono convertiti direttamente in 'float'. Sarebbe inusuale per un programmatore utilizzarli intenzionalmente, ma è un uso legittimo della lingua e dovrebbe essere compilato come indicato. –