2013-02-24 19 views
11

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?

+1

Sembra più un errore di battitura nel contesto, poiché entrambi hanno una specifica di precisione. 1.0f è ancora più leggibile, però. –

+0

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.) –

+0

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. –

risposta

12

Ma ci sono casi in cui l'aggiunta di 0 di trailing alla dichiarazione del valore in virgola mobile cambia le cose?

L'unica "cosa" che l'aggiunta di zero cambierebbe è la leggibilità. Il codice risultante sarebbe esattamente lo stesso, perché i compilatori non si preoccupano, ma la costante con uno zero in posizione sarebbe più facile da leggere dai lettori umani.

+0

Leggibilità! Così spesso trascurato. – Johnsyweb

+2

Significativo solo per gli umani, sì. C'è per la leggibilità, forse no. La maggior parte delle persone che si occupano di numeri seguono una convenzione in cui gli zero finali indicano il numero di cifre significative. –