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.

È stato utile?

Soluzione

Wikipedia :

  

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top