Dezimal-zu-Floating-Point-Conversions Die Conversion-Prozedur Die Regeln für die Umwandlung einer Dezimalzahl in Gleitkomma sind wie folgt: Konvertieren Sie den absoluten Wert der Zahl in Binärdatei, vielleicht mit einem Bruchteil nach dem Binärpunkt. Dies kann durch Umwandlung der Integral - und Fraktionsteile getrennt erfolgen. Der integrale Teil wird mit den zuvor untersuchten Techniken umgewandelt. Der Bruchteil kann durch Multiplikation umgewandelt werden. Dies ist grundsätzlich die Umkehrung der Divisionsmethode: Wir vermehren sich immer wieder mit 2 und ernten jedes Bit, sobald es von der Dezimalzahl übrig geblieben ist. Anhängen von Zeiten 2 0 bis zum Ende der Binärzahl (die ihren Wert nicht ändert). Normalisieren Sie die Nummer. Bewege den Binärpunkt, so dass es ein bisschen von links ist. Stellen Sie den Exponenten von zwei so ein, dass sich der Wert nicht ändert. Lege die Mantisse in das Mantissenfeld der Nummer. Weglassen Sie die führende, und füllen Sie mit Nullen auf der rechten Seite. Füge die Bias dem Exponenten von zwei hinzu und lege sie in das Exponentenfeld. Die Vorspannung beträgt 2 k minus1 minus 1, wobei k die Anzahl der Bits im Exponentenfeld ist. Für das 8-Bit-Format k 3 ist also die Vorspannung 2 3minus1 minus 1 3. Für IEEE 32-bit, k 8 ist also die Vorspannung 2 8minus1 minus 1 127. Setzt das Vorzeichenbit 1 für negativ 0 Positiv, nach dem Vorzeichen der Originalnummer. Verwenden des Konvertierungsvorgangs Konvertieren Sie 2.625 in unser 8-Bit-Gleitkommaformat. Der integrierte Teil ist einfach, 2 10 10 2. Für den Bruchteil: Generiere 1 und nichts bleibt. So 0.40625 10 0.01101 2. Normalisieren: 0.01101 2 1.101 2 mal 2 -2. Mantisse ist 1010, Exponent ist -2 3 1 001 2. Zeichen-Bit ist 0. Also 0.40625 ist 0 001 1010 1a 16 Convert -12.0 zu unserem 8-Bit-Gleitkomma-Format. 12 10 1100 2. Normalisieren: 1100.0 2 1.1 2 mal 2 3. Mantisse ist 1000, Exponent ist 3 3 6 110 2. Zeichen-Bit ist 1. So -12.0 ist 1 110 1000 e8 16 Konvertieren Sie Dezimal 1.7 zu unserem 8-Bit-Gleitkommaformat. Der integrale Teil ist einfach, 1 10 1 2. Für den Bruchteil: Erzeugen Sie 1 und fahren Sie mit dem Rest fort. Der Grund, warum der Prozess endlos fortsetzen wird, ist das. Die Zahl 710, die einen vollkommen vernünftigen Dezimalbruch bildet, ist eine Wiederholungsfraktion im Binär, genau wie die Fraktion 13 eine Wiederholungsfraktion in Dezimalzahl ist. (Es wiederholt sich auch im Binär.) Wir können das nicht genau als Gleitkommazahl darstellen. Am nächsten können wir in vier Bits kommen .1011. Da wir bereits eine führende 1 haben, ist die beste 8-Bit-Nummer, die wir machen können, 1.1011. Schon normalisiert: 1.1011 2 1.1011 2 mal 2 0. Mantisse ist 1011, Exponent ist 0 3 3 011 2. Zeichenbit ist 0. Das Ergebnis ist 0 011 1011 3b 16. Das ist natürlich nicht genau. Wenn du es wieder in Dezimalzahl umwandst, bekommst du 1.6875. Convert -1313.3125 auf IEEE 32-Bit-Gleitkomma-Format. Der integrierte Teil ist 1313 10 10100100001 2. Die Fraktion: Generiere 0 und weiter. Floating Point Thomas Finley, April 2000 Inhalt und Einleitung Dieses Dokument erklärt den IEEE 754 Gleitkomma-Standard. Es erklärt die binäre Darstellung dieser Zahlen, wie man in den Dezimalwert von Gleitkomma umwandelt, wie man von Gleitkomma in Dezimal umwandelt, diskutiert spezielle Fälle in Gleitkomma und endet schließlich mit einigen C-Code zu weiteren Verständnis von Gleitkomma. Dieses Dokument umfasst keine Operationen mit Gleitkommazahlen. Ich schrieb dieses Dokument, so dass, wenn Sie wissen, wie zu repräsentieren, können Sie die Darstellung Abschnitt überspringen, und wenn Sie wissen, wie man in die Dezimalzahl von einzelnen Präzision zu konvertieren, können Sie diesen Abschnitt zu überspringen, und wenn Sie wissen, wie man auf einzelne Präzision aus konvertieren Dezimal, können Sie diesen Abschnitt überspringen. Repräsentation Zuerst wissen Sie, dass Binärzahlen haben können, wenn Sie mein Sprichwort so verzeihen, ein Dezimalpunkt. Es funktioniert mehr oder weniger die gleiche Weise, dass der Dezimalpunkt mit Dezimalzahlen arbeitet. Zum Beispiel ist die Dezimalzahl 22.589 nur 22 und 510 -1 810 -2 910 -3. Ähnlich ist die Binärzahl 101.001 einfach 12 2 02 1 12 0 02 -1 02 -2 12 -3. Oder eher einfach 2 2 2 0 2 -3 (diese besondere Zahl arbeitet aus 9.125, wenn das dein Denken hilft). Zweitens wissen, dass Binärzahlen, wie Dezimalzahlen, in wissenschaftlicher Notation dargestellt werden können. Z. B. Die Dezimalzahl 923.52 kann als 9.2352 dargestellt werden 10 2. Ebenso können Binärzahlen auch so ausgedrückt werden. Sagen wir die Binärzahl 101011.101 (das ist 43.625). Dies wäre mit wissenschaftlicher Notation als 1.01011101 2 5 dargestellt. Nun, da ich sicher bin, dass das Verständnis perfekt ist, kann ich endlich in die Repräsentation übergehen. Die Einzelpräzisions-Gleitkommaeinheit ist ein Paket von 32 Bits, in drei Abschnitte ein Bit, acht Bits und dreiundzwanzig Bits in dieser Reihenfolge unterteilt. Ich benutze die vorherige Binärzahl 1.01011101 2 5, um zu veranschaulichen, wie man eine Binärzahl in wissenschaftlicher Notation nehmen und sie in Gleitkomma-Notation darstellen würde. Wenn wir einfach von hex zu binary umwandeln, ist 0x64 0110 0100, was das gleiche Ergebnis wie das 011001 ist, wie oben angegeben. Diese Methode ist viel schneller. Jedenfalls nehmen wir diese Zahlen, die wir bekommen haben, und vertreten sie als .011001 und legen sie in die Reihenfolge, in der wir sie erworben haben. Setzen Sie in Folge mit unserer binären Darstellung von 329, erhalten wir 101001001.011001. In unserer binären wissenschaftlichen Notation ist dies 1.01001001011001 2 8. Wir verwenden dann, was wir wissen, wie einzelne Präzisionszahlen repräsentiert sind, um diesen Prozess abzuschließen. Das Schild ist positiv, also ist das Schildfeld 0. Der Exponent ist 8. 8 127 135, also ist das Exponentenfeld 10000111. Die Mantisse ist nur 01001001011001 (erinnere dich an die implizite 1 der Mantisse bedeutet, dass wir nicht die führenden 1) plus enthalten Aber viele 0s müssen wir auf die rechte Seite hinzufügen, um diese Binärzahl 23 Bits lang zu machen. Da einer der Hausaufgabenprobleme das als Hex repräsentiert, werde ich mit einer Hex-Nummer fertig sein. Dann brechen wir es in vier Bitstücke (da jede hexadezimale Ziffer das Äquivalent von 4 Bits ist) und dann jede vier Bitmenge in die entsprechende hexadezimale Ziffer umwandeln. Also, in hexadezimal, diese Zahl ist 0x43A4B200. Spezielle Zahlen Manchmal fühlt sich der Computer ein Bedürfnis, ein Ergebnis einer Berechnung hervorzuheben, die reflektiert, dass ein Fehler gemacht wurde. Vielleicht wäre die Größe des Ergebnisses einer Berechnung größer oder kleiner als dieses Format scheint zu unterstützen. Vielleicht hast du versucht, null zu teilen. Vielleicht versuchen Sie, null zu repräsentieren Wie funktioniert man mit diesen Problemen Die Antwort ist, dass es spezielle Fälle von Gleitkommazahlen gibt, insbesondere wenn das Exponentenfeld alle 1 Bits (255) oder alle 0 Bits (0) ist. Denormalisierte Zahlen Wenn Sie ein Exponent-Feld haben, das alle Null-Bits ist, ist dies eine sogenannte denormalisierte Zahl. Wenn das Exponentenfeld gleich Null ist, würden Sie denken, dass der eigentliche Exponent -127 wäre, also würde diese Zahl die Form von 1.MANTISSA 2 -127 wie oben beschrieben annehmen, aber das geht nicht. Stattdessen ist es 0.MANTISSA 2 -126. Beachten Sie, dass der Exponent nicht mehr der Wert des Exponentenfeldes minus 127 ist. Es ist einfach -126. Beachten Sie auch, dass wir nicht mehr ein implizites ein bisschen für die Mantisse enthalten. Als Beispiel nehmen Sie die Fließkommazahl als 0x80280000 dargestellt. Zuerst konvertiere dies in binär. Unser Zeichen Bit ist 1, also ist diese Zahl negativ. Unser Exponent ist 0, also wissen wir, dass dies eine denormalisierte Zahl ist. Unsere Mantisse ist 0101, die eine echte Mantisse von 0,0101 reflektiert, erinnern wir uns nicht, was bisher ein implizites ein Bit für einen Exponenten von Null war. Also, das heißt, wir haben eine Nummer -0.0101 2 2 -126 -0.3125 10 2 -126 -1.25 10 2 -128. Sie können an Null als einfach eine andere denormalisierte Zahl denken. Null wird durch einen Exponenten von Null und eine Mantisse von Null dargestellt. Aus unserem Verständnis der denormalisierten Zahlen ergibt sich dies in 02 -126 0. Dieses Vorzeichenbit kann entweder positiv (0) oder negativ (1) sein, was entweder zu einer positiven oder negativen Null führt. Dies macht nicht sehr viel Sinn mathematisch, aber es ist erlaubt. So wie der Fall aller Nullbits im Exponentenfeld ein Spezialfall ist, so ist der Fall von allen Bits. Wenn das Exponentenfeld alle eins ist und die Mantisse alle Nullen ist, dann ist diese Zahl eine Unendlichkeit. Es können entweder positive oder negative Unendlichkeiten je nach Vorzeichen Bit sein. Zum Beispiel ist 0x7F800000 positiv unendlich, und 0xFF800000 ist negativ unendlich. NaN (keine Zahl) Diese Sondergrößen haben ein Exponentenfeld von 255 (alle ein Bits) wie Unendlichkeit, unterscheiden sich aber von der Darstellung der Unendlichkeit dadurch, daß die Mantisse einige Bits enthält. Es spielt keine Rolle, wo sie sind oder wie viele von ihnen gibt es, nur so lange, wie es einige gibt. Das Zeichen-Bit scheint dies nicht zu beeinflussen. Beispiele für diese Sondermenge sind 0x7FFFFFFF, 0xFF81ABD0, 0x7FAA12F9 und sofort. Zusammenfassung der Sonderfälle Eine Zusammenfassung der Sonderfälle ist in der nachstehenden Tabelle dargestellt. Es ist mehr oder weniger eine Kopie der Tabelle auf Seite 301 der zweiten Auflage von Computer Organisation und Design, die Hardware Software Interface von Patterson und Hennessy, das Lehrbuch für Informatik 104 im Frühjahr 2000 Semester gefunden. Obwohl nur eine einzige Präzision im obigen Text abgedeckt wurde, habe ich doppelte Präzision aus Gründen der Vollständigkeit. Wann, wo und wo nicht Wenn du Operationen wie 00 hast oder Unendlichkeit von Unendlichkeit (oder einer anderen zweideutigen Berechnung) subtrahierst, bekommst du NaN. Wenn du eine Nummer null teilt, bekommst du eine Unendlichkeit. Die Berücksichtigung dieser speziellen Operationen erfordert jedoch einige zusätzliche Anstrengungen seitens des Designers und kann zu langsamen Operationen führen, da mehr Transistoren im Chipdesign verwendet werden. Aus diesem Grund werden manchmal CPUs diese Operationen nicht berücksichtigen und stattdessen eine Ausnahme generieren. Zum Beispiel, wenn ich versuche, durch Null zu teilen oder Operationen mit unendlich zu machen, erzeugt mein Computer Ausnahmen und weigert sich, den Vorgang abzuschließen (mein Computer hat einen G3-Prozessor oder MPC750). Helper Software Wenn Sie interessiert sind, weiter zu untersuchen, habe ich zwei Programme, für die ich den C-Code, den Sie ausführen können, um ein besseres Verständnis davon zu erhalten, wie Gleitkomma funktioniert, und auch um Ihre Arbeit auf verschiedene Aufgaben zu überprüfen. Hex 2 Float Dieses Programm akzeptiert als Eingabe eine hexadezimale Menge und liest es als Rohdaten in die Variable theFloat. Das Programm gibt dann die hexadezimale Darstellung der Daten im Float aus (wiederholt die Eingabe) und druckt daneben die Gleitkommamenge, die sie repräsentiert. Ich zeige hier eine Probe des Programms. Beachten Sie die Sonderfall-Gleitkomma-Mengen (0, Unendlichkeit und keine Zahl). Für die denormalisierten, aber ungleich Null, wird dieses Programm null anzeigen, obwohl die Zahl nicht wirklich Null ist. Wenn Sie dieses Problem umgehen möchten, ersetzen Sie das f in der Formatierungszeichenfolge der printf-Funktion mit e, die die Nummer mit der wissenschaftlichen Notation auf eine hohe Präzision abgibt. Ich habe es nicht als e, weil ich die wissenschaftliche Notation sehr ärgerlich finde. Float 2 Hex Dies ist eine leichte Abänderung des Hex 2 Float Programms. Die Ausnahme lautet in einer Gleitkommazahl. Genau wie und gibt die hexadezimale Form plus die Fließkommazahl aus. Wieder habe ich einen Beispiel-Lauf dieses Programms, die Bestätigung der Ergebnisse der Beispiel-Probleme, die ich früher in diesem Text, zusammen mit einigen anderen einfachen Fällen. Beachten Sie die hexadezimale Darstellung von 0,2. Und das ist das Ende dieses Kapitels. Thomas Finley 2000Decimal to Floating-Point Converter Über den Dezimal-Floating-Point-Konverter Dies ist ein Dezimal-Binär-Gleitkomma-Konverter. Es wird eine Dezimalzahl in die nächstgelegene Einzel-Präzisions - und Doppelpräzisions-IEEE 754-Binär-Gleitkommazahl umwandeln, wobei die Runde-Halb-zu-Gerade-Rundung (der Standard-IEEE-Rundungsmodus) verwendet wird. Es ist mit einer Präzisions-Arithmetik implementiert, so dass seine Umwandlungen korrekt gerundet sind. Es wird sowohl normale als auch subnorme Zahlen umwandeln und konvertiert Zahlen, die überlaufen (bis unendlich) oder unterlaufen (auf Null). Die daraus resultierende Gleitkommazahl kann in zehn Formen dargestellt werden: in Dezimalzahl, in binärer, in normalisierter dezimaler wissenschaftlicher Notation, in normalisierter binärwissenschaftlicher Notation als normalisierte Dezimalzeit eine Kraft von zwei, als Dezimalzahl ganzzahlig eine Kraft von zwei , Als Dezimal-Ganzzahl mal eine Potenz von zehn, als hexadezimale Gleitkomma-Konstante, in roher Binärdatei und in rohem Hexadezimal. Jede Form repräsentiert den genauen Wert der Gleitkommazahl. Warum diesen Konverter verwenden Dieser Konverter wird Ihnen zeigen, warum Zahlen in Ihrem Computer Programme, wie 0,1, nicht verhalten, wie you8217d erwarten. Innerhalb des Computers können die meisten Zahlen mit einem Dezimalpunkt nur eine andere Zahl angenähert werden, nur ein kleines bisschen weg von dem, das du willst, muss dafür stehen. Beispielsweise wird im Einzelpräzisions-Gleitkomma 0,1 0,100000001490116119384765625. Wenn dein Programm 0.1 druckt, liegt es dir an, wenn es druckt 0.100000001, it8217s noch lügen, aber zumindest it8217s erzählt dir du wirklich don8217t habe 0.1. So verwenden Sie diesen Konverter Geben Sie eine positive oder negative Zahl ein, entweder in Standardform (z. B. 134.45) oder Exponenten (z. B. 1.3445e2). Geben Sie Bruchwerte mit einem Dezimalpunkt (lsquo. rsquo) an und verwenden Sie keine Kommas. Im Wesentlichen können Sie eingeben, was ein Computerprogramm als Gleitkomma-Literal akzeptiert, außer ohne Suffix (wie lsquofrsquo). Überprüfen Sie die Felder für die IEEE-Präzision, die Sie wählen möchten. Single . oder beides. (Double ist die Voreinstellung.) Double bedeutet eine 53-Bit-Signale und (weniger if subnormal) mit einem 11-Bit-Exponenten Single bedeutet eine 24-Bit-Signale und (weniger wenn subnormal) mit einem 8-Bit-Exponenten. Überprüfen Sie die Felder für ein beliebiges Ausgabeformat, das Sie wählen möchten, ein oder alle zehn. (Dezimal ist die Standardeinstellung.) Klicken Sie auf lsquoConvertrsquo, um zu konvertieren. Klicken Sie auf lsquoClearrsquo, um das Formular zurückzusetzen und von vorne anzufangen. Wenn Sie eine andere Nummer umwandeln möchten, geben Sie einfach die ursprüngliche Nummer ein und klicken Sie auf lsquoConvertrsquo 8212 Es gibt keine Notwendigkeit, lsquoClearrsquo zuerst zu klicken. Es gibt zehn Ausgabeformulare zur Auswahl: Dezimal. Zeigen Sie die Fließkommazahl in Dezimalzahl an. (Erweiterung der Ausgabebox, falls nötig, um alle Ziffern zu sehen.) Binär. Zeigen Sie die Gleitkommazahl im Binär an. (Expand Ausgabe Feld, wenn nötig, um alle Ziffern zu sehen.) Normalisierte dezimal wissenschaftliche Notation. Zeigen Sie die Fließkommazahl dezimal, aber kompakt mit normalisierter wissenschaftlicher Notation an. (Expand Ausgabe Feld, wenn nötig, um alle Ziffern zu sehen.) Normalisierte binäre wissenschaftliche Notation. Zeigen Sie die Fließkommazahl in binärer, aber kompakt, mit normalisierter binärwissenschaftlicher Notation an. Hinweis . Subnormalen Zahlen werden normalisiert, mit ihrem tatsächlichen Exponenten. Normalisierte Dezimalzeiten eine Kraft von zwei. Zeigen Sie die Fließkommazahl in einer hybriden normalisierten wissenschaftlichen Notation an, da eine normalisierte Dezimalzahl mal eine Potenz von zwei ist. Dezimal-Ganzzahl mal eine Potenz von zwei. Zeigen Sie die Gleitkommazahl als Dezimalzahl an. (Die binäre Darstellung der Dezimalzahl ist das Bitmuster der Gleitkomma-Darstellung, weniger nachlaufende Nullen.) Diese Form ist für negative Exponenten am interessantesten, da sie die Gleitkommazahl als dyadische Fraktion darstellt. Dezimal-Ganzzahl mal eine Zehnerpotenz. Zeigen Sie die Gleitkommazahl als Dezimalzahl an. Diese Form ist für negative Exponenten am interessantesten, da sie die Gleitkommazahl als Bruch darstellt. (Erweiterung der Ausgabebox, falls nötig, um alle Ziffern zu sehen.) Hexadezimal-Gleitkomma-Konstante. Zeigen Sie die Gleitkommazahl als hexadezimale Gleitkomma-Konstante an. Hinweis . Es gibt viele Möglichkeiten, hexadezimale Gleitkomma-Konstanten zu formatieren, wie Sie sehen würden, wenn Sie beispielsweise die Ausgabe von Java, Visual C, gcc C und Python-Programmen verglichen haben. Die Unterschiede in den verschiedenen Sprachen sind oberflächlich, obwohl 8212 nachlaufende Nullen angezeigt werden können oder auch nicht, positive Exponenten können ein Pluszeichen haben oder nicht. Dieser Konverter formatiert die Konstanten ohne nachlaufende Nullen und ohne Pluszeichen. Hinweis . Wie viele Programmiersprachen zeigt dieser Konverter ungewöhnliche, unnormalisierte Zahlen, wobei ihre Exponenten auf den minimalen normalen Exponenten gesetzt sind. Hinweis . Die letzte hexadezimale Ziffer in einer hexadezimalen Gleitkomma-Konstante kann nachlaufende binäre 0s innerhalb dieses doesn8217t notwendigerweise implizieren, dass diese Bits im ausgewählten IEEE-Format existieren. Raw binary Zeigen Sie die Gleitkommazahl in ihrem rohen IEEE-Format an (Zeichenbit gefolgt von dem Exponentenfeld, gefolgt von dem Signifikanzfeld). Raw hexadezimal. Zeigen Sie die Gleitkommazahl in ihrem rohen IEEE-Format an, das dem Rohbinärformat entspricht, aber exakt in Hexadezimal ausgedrückt wird. (Siehe hier für weitere Details zu diesen Ausgabeformularen.) Es gibt zwei Ausgabemarkierungen: Ungenau. Wenn dies der Fall ist, zeigt dies an, dass die Umwandlung ungenau war, dh es musste auf eine Annäherung der Eingangsnummer gerundet werden. (Die Konvertierung ist ungenau, wenn die Dezimalausgabe nicht mit der Dezimal-Eingabe übereinstimmt, aber das ist eine schnellere Möglichkeit zu erzählen.) Hinweis: Dieser Konverter markiert Überlauf in unendlich und unterlauf auf Null als ungenau. Subnormal Wenn dies der Fall ist, zeigt dies an, dass die Zahl zu klein war und mit weniger als voller Präzision umgewandelt wurde (die tatsächliche Genauigkeit ist in Klammern angegeben). Implementierung Ich schrieb diesen Konverter aus dem Scratch 8212 nicht auf native Umwandlungsfunktionen wie strtod () oder strtof () oder printf (). Es basiert auf dem großen Integer-basierten Algorithmus, den ich in meinem Artikel beschreibe ldquoCorrect Decimal To Floating-Point mit Big Integers rdquo. I8217ve implementiert es mit BCMath. Aus praktischen Gründen habe ich eine beliebige (etwas) Begrenzung auf die Länge der Dezimal-Eingabe gesetzt you8217ll erhalten eine Fehlermeldung, wenn Sie es treffen. Dies wird Filtereingaben filtern, die sonst in Unendlichkeit übergehen oder auf Null fließen würden, aber es wird auch verhindern, dass Sie einige ldquohardrdquo halbwegs Rundungsfälle eingeben. (Für die Aufzeichnung aber akzeptiert dieser Konverter alle harten Beispiele I8217ve, die auf meiner Website besprochen werden.) Für alle Eingaben, die akzeptiert werden, ist die Ausgabe jedoch korrekt (ungeachtet aller Fehler, die meinem umfangreichen Test entgehen).Entwickeln von IEEE 754 Floating Point in Binary This Post erklärt, wie man Gleitkommazahlen in Binärzahlen im IEEE 754 Format umwandelt. Ein guter Link zum Thema IEEE 754 Umwandlung gibt es auf der Website von Thomas Finleys. Für diesen Beitrag werde ich mit dem IEEE 754 Single-Präzisions-Binär-Gleitkomma-Format bleiben: binary32. Sehen Sie diese andere Posting für C, Java und Python Implementierungen für die Umwandlung zwischen den binären und dezimalen Formaten. Ausdrücke in wissenschaftlicher Notation Sie können sich bewusst sein, dass Binärzahlen, wie Dezimalzahlen, Dezimalpunkte haben können. Und diese Binärzahlen, wie Dezimalzahlen, können mit wissenschaftlicher Notation ausgedrückt werden: Dezimalzahl: 923.52 9.2352 x 10 2 Binär: 101011.101 1.01011101 x 2 5 Die Zahl, die die 10 oder 2 auf die ldquoexponentrdquo erhöht, stellt die Anzahl der verschobenen Plätze dar Nach links oder rechts vom Dezimalpunkt entsprechend. In IEEE 754 Gleitkomma-Darstellung ist die Binärzahl in drei Abschnitte unterteilt: das Vorzeichenbit, der Exponent und die Mantisse (Bruchteil). Das nimmt nur ein Bit ein und steht für das Zeichen: 0 für positiv und 1 für negativ. Der Exponentenabschnitt für einen 16-Bit - (Halbpräzisions-) Gleitpunkt belegt 5 Bits und speichert den oben beschriebenen Exponentenwert. Für 32-Bit (Single-Precision) wie im obigen binary32-Beispiel belegt dieser Abschnitt 8 Bits für 64-Bit - (Double-Precision) - Formate, wobei dieser Abschnitt 11 Bits belegt. Umgang mit positiven und negativen Exponenten Eine 8-Bit-Exponenten-Codierung kann ganze Zahlen von 0 (00000000) bis 255 (11111111) darstellen. Aber was ist mit negativen Exponenten Wir müssen diese auch mitbringen können. Um dies zu decken, stellen wir sicher, dass der Exponent Wert 127 größer ist. Wenn unser Exponent (sagen wir) 3 dann 127 dazu geben, um 3 127 130 (dezimal) 10000010 (binär) zu geben. Diese Vorspannung ist einfach 2 n ndash 1, wobei n die Anzahl der Exponentenbits ist, so dass 8-Bit-Exponenten-Codierungen eine Vorspannung von 2 8 ndash 1 128 ndash 1 127 haben würden. Wenn unser Exponent minus 3 war, dann wäre das Ergebnis -3 127 124 (dezimal) 1111100 (binär). Mit anderen Worten repräsentiert (00000000) bis (01111111) die Exponenten von -127 bis null, und (10000000) bis (11111111) würden die Exponenten von 1 bis 128 repräsentieren. Der dritte Abschnitt unserer 32-Bit-Darstellung ist 23 Bits lang . Die Mantisse, die manchmal auch die Bedeutung genannt wird, stellt den Bruchteil der Zahl in der binären wissenschaftlichen Notation dar, dh die Binärzahl rechts vom Dezimalpunkt. Beispiel: 12.375 in IEEE 754 Binärformat Dieses Beispiel für die Umwandlung von Dezimaldarstellung in ein binary32-Format wird von der Wikipedia-Seite übernommen. Betrachten Sie die Nummer 12.375. Nehmen Sie den nicht-gebrochenen Teil von 12.375 und konvertieren sie in normaler Weise in binär: 12 (dezimal) ist 1100 (binär) Seit 12 (8 1) (4 1) (2 0) (2 0) Umwandlung des Bruchteils ( 0,375) in Binär wird mit folgendem Verfahren durchgeführt: 1. multiplizieren Sie den Bruch um 2 2. halten Sie den ganzzahligen Teil der Multiplikation als binäres Ergebnis 3. re-multiplizieren Sie neue Fraktion um 2 4. wiederholen Sie 1 ndash 3 bis zu einem Bruchteil von Null Gefunden oder bis die Präzisionsgrenze erreicht ist, die 23 Bruchziffern für IEEE 754 binäres Format ist, dh: 0,375 x 2 0,750 0 0,750 gt 0 0.750 x 2 1.500 1 0.500 gt 1 0.500 x 2 1.000 1 0.000 gt 1 Der Fraktionsteil kommt schließlich Bis 0.000, also beenden wir. Das binäre Ergebnis ist 011, also 0,375 (dezimal) ist 0,011 (binär) 12.375 (dezimal) ist jetzt 1100.011 (binär). Konvertieren Sie das Ergebnis in das erforderliche binäre wissenschaftliche Format IEEE 754 binary32-Format erfordert, dass Sie Werte in der wissenschaftlichen Form, die zuvor beschrieben wurden, so dass aus dieser wissenschaftlichen Notation können wir nun ableiten: Sign 0 (positive Zahl) Bias 2 8 -1 127 (8- Bit-Exponent-Codierung für binary32) Hinzufügen dieses zum Exponenten gibt: 3 127 130 (dezimal) 10000010 (binär) Mantisse 100011 (fraktionaler Teil rechts vom Dezimalpunkt) Aus diesen bilden wir die daraus resultierende 32-Bit-IEEE 754-Binärformat-Repräsentation von 12.375 als:
No comments:
Post a Comment