Frage

ich weiß, dass Größe von verschiedenen Datentypen ändern kann, je nachdem, welches System ich bin auf. Ich benutze 32bits XP und mit dem sizeof () Operator in C ++, wie es scheint, zwei langen 12 Byte ist, und doppelt so hoch ist 8.

Allerdings sind die meisten Hauptquellen Staaten, die lange Doppel 8 Bytes, und der Bereich ist daher die gleiche wie ein Doppel.

Wie kommt habe ich 12 Bytes? Wenn lange Doppel tatsächlich 12 Byte ist, nicht das erweitert den Bereich auch von Wert? Oder die lange Signatur wird nur verwendet (die Compiler-Zahlen), wenn der Wert den Bereich einer doppelten überschreiten, und somit erstreckt sich über 8 Bytes?

Danke.

War es hilfreich?

Lösung

Zitiert von Wikipedia :

  

Auf der x86 Architektur, implementieren die meisten Compiler long double als die 80-Bit erweiterter Genauigkeit durch diese Art der Hardware unterstützt (die manchmal als 12 oder 16 Byte gespeichert, um Datenstruktur beizubehalten.

und

  

Compiler kann auch langen Doppel für ein 128-Bit-quadruple precision-Format verwenden, die derzeit in Software implementiert ist.

Mit anderen Worten, ja, ein long double können der Lage sein, einen größeren Bereich von Werten zu speichern, als ein double. Aber es ist völlig bis zu den Compiler.

Andere Tipps

Für moderne Compiler auf x64, Clang und GCC verwendet 16-Byte-Doppel für long double während VC ++ verwendet 8-Byte-Doppel. Mit anderen Worten, mit Clang und GCC erhalten Sie höhere Präzision Doppel aber für VC ++ long double ist die gleiche wie double. Das moderne x86-CPUs tun, um dieses 16-Byte-Doppel unterstützt so dass ich denke Clang und GCC, das Richtige tun, und ermöglicht es Ihnen, geringere Hardwarefähigkeit mit höherer Sprache Primitiven zugreifen zu können.

Die Standard-Byte-Größen für Zahlen sind die garantierten Mindestgrößen für alle Plattformen. Sie können auf einigen Systemen größer sein, aber sie werden nie kleiner sein.

Was meine Programmierung Neuling Erfahrung Aufforderungen:

  • Verwenden periodisch zu normalisierten float [-1,0, + 1.0]

  • Halten Normierwert separat mit double oder long double

  • Normalisieren einleitet Rauschen = kleine Fehler = hohe Frequenzen Variablen Werte

  • Von Zeit zu Zeit ist es zu normalisieren mit Medianwert halten, nützlich getrennt und halten Sie Daten sortieren (Originaldaten Reihenfolge gespeichert werden kann als Permutation Vektor)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top