Wo ist das 24. Bruchbit auf einem Float mit einfacher Genauigkeit? IEEE 754

7

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%     
gifnoc-gkp 14.08.2013, 16:23
quelle

3 Antworten

18

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.

  1. Falls Sie sich wundern, warum dieses seltsame Format verwendet wird: IEEE Fließkommazahl (wie viele andere) soll sicherstellen, dass Sie, wenn Sie sein Bitmuster als Integer der gleichen Größe behandeln, diese als vorzeichenbehaftetes Zweierkomplement vergleichen können Ganzzahlen und sie werden immer noch in der richtigen Reihenfolge als Gleitkommazahlen sortiert. Da das Vorzeichen der Zahl im höchstwertigen Bit liegt (wo es für eine Zweierkomplement-Ganzzahl ist), wird dies als Vorzeichenbit behandelt. Die Bits des Exponenten werden als die nächsten höchstwertigen Bits gespeichert - aber wenn wir ein Zweierkomplement für sie verwenden würden, würde ein Exponent kleiner als 0 das zweithöchstwertige Bit der Zahl setzen, was zu etwas führen würde, das wie eine große Zahl aussieht als ganze Zahl. Durch die Verwendung des Bias-Formats lässt ein kleinerer Exponent dieses Bit frei und ein größerer Exponent setzt es, so dass die Ordnung als Integer die Ordnung als Fließkomma wiedergibt.
Jerry Coffin 14.08.2013, 16:27
quelle
5

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.

    
R.. 14.08.2013 16:28
quelle
1

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.

    
quelle

Tags und Links