long double double vs
-
27-09-2019 - |
Domanda
Lo so che le dimensioni dei vari tipi di dati può variare a seconda del sistema sono su. Io uso 32bit di XP, e utilizzando l'operatore sizeof () in C ++, sembra che long double è di 12 byte, e doppio è 8.
Tuttavia, la maggior parte delle principali fonti di stati che long double è di 8 byte, e l'intervallo è quindi lo stesso come una doppia.
Come mai ho 12 byte? Se long double è effettivamente 12 byte, non questo amplia la gamma di valori anche? O la firma lunga è utilizzata solo (figure compilatore) quando il valore supera l'intervallo di un letto, e quindi, si estende oltre 8 byte?
Grazie.
Soluzione
sull'architettura x86, la maggior parte dei compilatori implementare lungo doppio come tipo di precisione esteso 80-bit supportato da tale hardware (talvolta memorizzato come 12 o 16 byte per mantenere struttura dati.
e
compilatori può anche utilizzare lungo doppio per un formato quadrupla precisione 128 bit, che è attualmente implementata nel software.
In altre parole, sì, un long double
possono essere in grado di memorizzare una più ampia gamma di valori di un double
. Ma è completamente fino al compilatore.
Altri suggerimenti
Per i compilatori moderni su x64, Clang e GCC utilizza 16 byte doppio per long double
mentre VC ++ utilizza 8 byte doppio. In altre parole, con Clang e GCC si ottiene una maggiore precisione doppia ma per VC ++ long double
è stessa double
. Le CPU x86 moderni supportano queste doppie 16 byte quindi penso Clang e GCC stanno facendo la cosa giusta e consente di accedere più bassa capacità di livello hardware utilizzando primitive linguaggio di alto livello.
Le dimensioni standard dei byte per i numeri sono i formati minimi garantiti su tutte le piattaforme. Essi possono essere più grandi in alcuni sistemi, ma non saranno mai più piccolo.
Per quanto riguarda la mia programmazione newbie esperienza istruzioni:
-
Usa float periodicaly normalizzato [-1.0, + 1.0]
-
Attesa valore di normalizzazione a parte con il doppio, o long double
-
introduce Normalizzazione rumore = piccoli errori = alte frequenze a I valori delle variabili
-
A volte è utile per normalizzare con fermo valore mediano separatamente e dati keep ordinati (ordine dei dati originali potrebbe essere salvato come permutazione vettore)