2016-01-22 15 views
5

Vedo che alcune persone scrivono il codice in cui l'uso casuale di qualcosa che necessita di virgola mobile viene dichiarato di utilizzare un tipo float (in C/C++). Questa non è una matrice enorme in cui lo spazio è importante, o che cerca di adattarsi di più a SIMD, o qualcosa del genere. Piccole cose come ridimensionare un valore di una percentuale o trovare un rapporto tra le quantità.`float` vs` double` in calcoli singoli casuali?

Avevo sempre usato double e considerato float essere solo per quando lo spazio era veramente importante. Ricordo i giorni in cui le CPU desktop non avevano hardware in virgola mobile e si poteva dire qualcosa sulle prestazioni della libreria software, ma con il primo co-processore '287 la precisione nativa era di 80 bit e lo float era solo per il lungo memorizzazione temporanea dei valori nella RAM o nei file e non ha influito sulla velocità di calcolo di un iota.

Oggi, c'è qualche motivo per utilizzare float invece di double in modo abituale? Situazione 1: specifico per hardware PC/Mac; Situazione 2: codice portatile che può essere presente su desktop e dispositivi mobili come telefoni.

Devo educare la mia squadra il modo in cui mi ricordo: Hey, sai, float è una cosa a metà dimensioni e double è normale. o c'è qualche compromesso o motivo per cui i programmatori C++ userebbero float ovunque e apparentemente (al mio POV) non sapevo che esistesse lo double?

La mia domanda non è specifica per la lingua, ma la mia terminologia è che float è 4 byte e double è 8 byte.

+0

Sono d'accordo sul fatto che il doppio debba essere usato a meno che non ti interessi delle prestazioni o delle dimensioni del POD. Immagino che ci fosse un tempo in cui le persone preferivano "breve" a "int" per le stesse ragioni, ma ora meno rilevanti. –

+1

Non penso che sia importante per le prestazioni anche per gli usi una tantum. –

+2

Correlati: http://stackoverflow.com/questions/1074474/should-i-use-double-or-float –

risposta

0

Come faccio notare in this answer, ci sono alcuni modi in cui float può essere più veloce di double, ma in generale se non sei sicuro che il floating-point è il collo di bottiglia, vorrei suggerire di attenersi a double. Eviterà inoltre problemi come this, this e this.

Un'eccezione ovvia è se è disponibile solo il supporto hardware per la precisione singola (ad esempio Cortex M4).

+0

Anche se c'è un argomento di prestazione forte, significa solo che l'analisi dovrebbe essere fatta per vedere se il float è buono abbastanza. Non ha senso ottenere velocemente risposte sbagliate. –