Gleitkommatypen (wie Single und Double) werden im Speicher durch ein Vorzeichen, eine Mantisse und einen Exponenten dargestellt. Betrachten Sie es als wissenschaftliche Notation:
Sign*Mantissa*Base^Exponent
Sie verwenden - wie zu erwarten - die Basis 2. Es gibt andere Optimierungen, die die Darstellung von Unendlich und NaN ermöglichen, und der Exponent ist versetzt (wird darauf zurückkommen), und eine Abkürzung für die Mantisse (wird darauf zurückkommen). . Suchen Sie nach dem Standard IEEE 754, der die Darstellung und den Betrieb für weitere Details abdeckt.
Für unsere Zwecke können wir es uns als eine Binärzahl "Mantisse" und einen "Exponenten" vorstellen, der Ihnen sagt, wo Sie das Dezimaltrennzeichen setzen sollen.
Bei Single haben wir 1 Bit für das Vorzeichen, 8 für den Exponenten und 23 für die Mantisse.
Nun ist die Sache, wir werden die Mantisse von der höchstwertigen Stelle speichern. Denken Sie daran, dass alle Nullen links nicht relevant sind. Und da wir binär arbeiten, wissen wir, dass die höchstwertige Ziffer eine 1 ※ ist. Nun, da wir das wissen, müssen wir es nicht speichern. Dank dieser Abkürzung beträgt die effektive Reichweite der Mantisse 24 Bit.
※: Sofern die von uns gespeicherte Nummer nicht Null ist. Dafür werden alle Bits auf Null gesetzt. Wenn wir jedoch versuchen, dies unter der von mir angegebenen Beschreibung zu interpretieren, erhalten Sie eine 2 ^ 24 (die implizite 1) multipliziert mit 1 (2 hoch dem Exponenten 0). Um dies zu beheben, ist Exponent Null ein spezieller Wert. Es gibt auch spezielle Werte, um Unendlich und NaN im Exponenten zu speichern.
Aufgrund des Exponentenoffsets kann - abgesehen von der Vermeidung der Sonderwerte - der Dezimalpunkt vor oder nach dem Beginn der Mantisse gesetzt werden, ohne dass ein Vorzeichen für den Exponenten erforderlich ist.
Dies bedeutet, dass bei großen Zahlen der Gleitkommatyp den Dezimalpunkt hinter das Ende der Mantisse setzt.
Denken Sie daran, dass die Mantisse eine 24-Bit-Zahl ist. Es wird niemals eine 25-Bit-Zahl darstellen ... es hat kein zusätzliches Bit. Daher kann die Single nicht zwischen 2 ^ 24 und 2 ^ 24 + 1 unterscheiden (dies sind die ersten 25 Bit-Zahlen und sie unterscheiden sich beim letzten Bit, das in der Single nicht dargestellt ist).
Für ganze Zahlen beträgt der Bereich der Single also -2 ^ 24 bis 2 ^ 24. Der Versuch, 1 zu 2 ^ 24 zu addieren, führt zu 2 ^ 24 (da 2 ^ 24 und 2 ^ 24 + 1 vom Typ her der gleiche Wert sind). Probieren Sie es online . Aus diesem Grund gehen beim Konvertieren von Integer in Single Informationen verloren. Dies ist auch der Grund, warum eine Schleife, die eine einzelne oder eine doppelte Schleife verwendet, tatsächlich eine Endlosschleife sein kann, ohne dass Sie es merken.