Ich habe mich heute etwas manipuliert und ich habe beschlossen, mein Fließkomma-Wissen etwas aufzufrischen!
Die Dinge gingen großartig , bis ich das sah:
... 23 Teilbits des Signifikanden erscheinen im Speicherformat, aber die Gesamtgenauigkeit beträgt 24 Bits
Ich lese es immer wieder, aber ich kann immer noch nicht herausfinden, wo das 24. Bit ist, ich habe etwas an einem binary point
bemerkt, also nahm ich an, dass es ein Punkt in der Mitte zwischen mantissa
und% co_de ist %.
Ich bin mir nicht wirklich sicher, aber ich glaube, der Autor hat über dieses Stück gesprochen:
%Vor%Das 24 th -Bit ist aufgrund der Normalisierung implizit.
Der Signifikand wird nach links verschoben (und einer von dem Exponenten für jede Bitverschiebung subtrahiert), bis das führende Bit des Signifikanden eine 1 ist.
Da das führende Bit eine 1 ist, werden nur die anderen 23 Bits tatsächlich gespeichert.
Es gibt auch die Möglichkeit einer unnormalen Zahl. Der Exponent wird als vorzeichenbehaftete Zahl im "Bias" -Format gespeichert, was bedeutet, dass es sich um eine vorzeichenlose Zahl handelt, wobei die Mitte des Bereichs definiert ist als 0
1 . Also, mit 8 Bits, wird es als eine Zahl von 0..255 gespeichert, aber 0 wird interpretiert, um -128 zu bedeuten, 128 wird interpretiert, um 0 zu bedeuten, und 255 wird als 127 interpretiert (ich kann einen Zaunpfostenfehler dort haben, aber Sie die Idee bekommen).
Wenn im Normalisierungsprozess dieser auf 0 dekrementiert wird (was einen tatsächlichen Exponentenwert von -128 bedeutet), stoppt die Normalisierung, und der Signifikand wird so wie er ist gespeichert. In diesem Fall wurde das implizite Bit von der Normalisierung als 0 anstelle von 1 angenommen.
Die meisten Gleitkomma-Hardware ist so konstruiert, dass sie grundsätzlich davon ausgeht, dass Zahlen normalisiert werden, also nehmen sie an, dass das implizite Bit eine 1 ist. Während der Berechnung prüfen sie die Möglichkeit einer abnormalen Zahl und in diesem Fall entsprechen sie ungefähr dem Äquivalent eine Ausnahme zu werfen und die Berechnung mit dieser Berücksichtigung erneut zu starten. Dies ist der Grund, warum Berechnungen mit Denormals oft drastisch langsamer als sonst durchgeführt werden.
Normalerweise (das Wortspiel verzeihen), ist das führende Bit einer Gleitkommazahl immer 1; Daher muss es nirgendwo gespeichert werden. Der Grund ist, dass, wenn es nicht 1 wäre, dies bedeuten würde, dass Sie den falschen Exponenten gewählt haben, um es darzustellen; Sie könnten mehr Präzision erhalten, wenn Sie die Mantisse-Bits nach links verschieben und einen kleineren Exponenten verwenden.
Die einzige Ausnahme sind die normalen / subnormalen Zahlen, die durch alle Nullstellen im Exponentenfeld repräsentiert werden (der niedrigste mögliche Exponent). In diesem Fall gibt es keine implizite führende 1 in der Mantisse und Sie haben eine abnehmende Genauigkeit, wenn der Wert gegen Null geht.
Für normale Gleitkommazahlen lautet die in der Gleitkommavariablen gespeicherte Zahl (Zeichen ignorieren) 1. mantissa * 2
exponent-offset
. Die führende 1 wird nicht in der Variablen gespeichert.