Wednesday 8 November 2017

Gleitkommazahlen In Binär Optionen


Sie interpretieren Ihre Daten falsch. 0 ist das Zeichen, also ist die Zahl positiv 100 ist der Exponent, der tatsächlich 1 (21) ist. Der Exponent ist signiert und die möglichen Werte sind: 000 (die Zahl 0 und den dendigierten Zahlen) 001 -2 010 -1 011 0 100 1 101 2 110 3 111 (Unendlichkeiten und NANs) P. S. NAN Nicht eine Nummer (Fehlercodes und Zeug) 0101 ist deine Mantisse. Was das bedeutet in der Tat ist, dass Ihre Nummer ist 1.0101 (theres ein verstecktes Bit für zusätzliche Präzision, da jede Zahl muss mit 1., dass 1 ist nicht tatsächlich gespeichert). Dies gibt Ihnen (1516) 2 2.625 Die Floating Point Number ist 45 (Base 16) i. e. 01000101 (Base 2) .. 0101 ist der Mantissenteil und 100 ist der Exponent eins. Bei der Wiederherstellung der führenden wird die Mantisse auf 1.0101 erneuert. Subtrahieren der Vorspannung von dem Exponenten, der bei 8-Bit-Darstellung 3 ist, wird der Exponent 1. Die Binärdarstellung ist 1.0101 21. De-Normalisierung erhalten wir 10.101, was die binäre Darstellung für 2.625 ist. Wenn du auf JasonDs antwortest, denke ich, dass es sicher ist, davon auszugehen, dass du verstehst oder eher für selbstverständlich stellst, dass ein Schwimmer einen negativen Exponenten haben kann. Aber wenn du dazu kommst, darüber nachzudenken, wie passiert das eigentlich, wo die Bias zu spielen kommt, und ich denke das ist die fehlende Verbindung in deinem Verständnis. In deinem Link haben sie das folgende Gesetz zur Berechnung der Vorspannung erwähnt: Wo k ist die Anzahl der Bits im Exponentenfeld. In deinem Beispiel war k 3 Bits, so dass die Bias 3 ist. Auf diese Weise kannst du jeden Exponenten im Bereich -3,4 (inklusive) kodieren. So, jetzt ist es hoffentlich klar, dass, wenn youre Dekodierung der Zahl, müssen Sie unbias der Exponenten zuerst. Also deine 24 ist eigentlich 21 wie JasonD gesagt hat. Beantwortet Mar 10 13 um 12:14 Ihre Antwort 2017 Stack Exchange, IncFloating 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 die Notwendigkeit, 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 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. Der Bruchteil: Erzeugen Sie 0 und fahren Sie fort.

No comments:

Post a Comment