float-Gleitkommazahl mit einfacher GenauigkeitIm Rechner belegt sie 4 Bytes, beschrieben mit 32-Bit-Binärdarstellung.
Gleitkommazahl mit doppelter GenauigkeitIm Rechner belegt sie 8 Bytes, beschrieben durch 64-Bit-Binärdarstellung.

Gleitkommazahlen werden im Rechner in Exponentialdarstellung dargestellt und zerlegt in:Vorzeichen, Mantisse, Vorzeichen des Exponenten, Exponentvier Teile.
Das Vorzeichenbit belegt 1 Binärstelle und gibt an, ob die Zahl positiv oder negativ ist.
Das Vorzeichen des Exponenten belegt 1 Binärbit und gibt an, ob der Exponent positiv oder negativ ist.
Die Mantisse repräsentiert die signifikanten Stellen einer Gleitkommazahl, 0.xxxxxxx, speichert aber nicht die führende 0 und den Dezimalpunkt.
Der Exponent speichert seine signifikanten Stellen.
Die Anzahl der Bits für den Exponenten und die Anzahl der Bits für die Mantisse werden vom Computersystem bestimmt.
Vielleicht belegen das Vorzeichen der Zahl plus die Mantisse 24 Bits und das Vorzeichen des Exponenten plus der Exponent 8 Bits --float。
Das Vorzeichen plus Mantisse belegt 48 Bits und das Vorzeichen des Exponenten plus Exponent 16 Bits —double。
Wenn man die Platzhalter für diese vier Teile kennt, schätzt man den Größenbereich binär und rechnet dann in Dezimal um – das ergibt den Wertebereich, den man wissen möchte.
Für Programmierer liegt der Unterschied zwischen double und float darin, dass double eine höhere Genauigkeit mit 16 signifikanten Stellen hat, während float 7 Stellen Genauigkeit hat. Aber double verbraucht doppelt so viel Speicher wie float, und die Berechnungsgeschwindigkeit von double ist viel langsamer als die von float. In der Programmiersprache C sind die Namen der Mathematikfunktionen für double und float unterschiedlich, also schreibe sie nicht falsch. Wenn einfache Genauigkeit ausreicht, verwende keine doppelte Genauigkeit (um Speicher zu sparen und die Berechnung zu beschleunigen).
| Type | Bitanzahl | Signifikante Stellen | Numerischer Bereich |
|---|---|---|---|
| float | 32 | 6-7 | -3.4*10(-38)~3.4*10(38) |
| double | 64 | 15-16 | -1.7*10(-308)~1.7*10(308) |
| long double | 128 | 18-19 | -1.2*10(-4932)~1.2*10(4932) |
Einfach ausgedrückt ist Float einfache Genauigkeit, belegt 4 Bytes im Speicher, mit 7 signifikanten Stellen (wegen des positiven und negativen Vorzeichens sind es nicht 8 Stellen); auf meinem Computer und der VC++6.0-Plattform ist die Standardanzeige 6 signifikante Stellen; double ist doppelte Genauigkeit, belegt 8 Bytes, mit 16 signifikanten Stellen, aber auf meinem Computer und der VC++6.0-Plattform ist die Standardanzeige ebenfalls 6 signifikante Stellen.
Beispiel: In C und C++ die folgende Zuweisungsanweisung:
float a=0.1;
Compiler-Fehler:warning C4305: 'initializing' : truncation from 'const double ' to 'float '
Grund:In C/C++ (nicht sicher, ob das nur in VC++ so ist), halten wir die 0.1 auf der rechten Seite des Gleichheitszeichens in der obigen Anweisung für einen float, aber der Compiler behandelt sie als double (weil Dezimalliterale standardmäßig double sind), daher gibt er diese Warnung aus. Üblicherweise ändert man es zu...0.1fDann ist es in Ordnung.
Meine übliche Praxis ist, häufig double zu verwenden, und ich verwende float nicht gern.
In C und C# wird für Gleitkommadaten der Typ mit einfacher Genauigkeit verwendet.floatund der Typ mit doppelter Genauigkeitdoublezum Speichern,floatDaten belegen 32 Bit,doubleDaten belegen 64 Bit, wir deklarieren eine Variable.float f= 2.25fWenn es um die Speicherzuweisung geht, wie wird der Speicher zugewiesen? Wenn er zufällig zugewiesen würde, wäre die Welt dann nicht im Chaos? Tatsächlich folgen sowohl float als auch double beim Speichern den IEEE-Standards: float folgt IEEE R32.24, und double folgt R64.53.
Ob einfache oder doppelte Genauigkeit, bei der Speicherung werden sie in drei Teile unterteilt:
- Vorzeichenbit: 0 steht für positiv, 1 steht für negativ.
- Exponent-Bits: Werden verwendet, um die Exponentendaten in wissenschaftlicher Notation zu speichern, und verwenden eine Bias-Darstellung.
- Mantissenteil: Mantissenteil.
Quelladresse: https://my.oschina.net/zd370982/blog/724265