Friday 23 June 2017

Floating Point Notation Binär Optionen


Binäre Fraktionen Während sie im Prinzip gleich funktionieren, unterscheiden sich binäre Fraktionen von Dezimalfraktionen, in welchen Zahlen sie mit einer vorgegebenen Anzahl von Ziffern genau darstellen können, und damit auch in welchen Zahlen in Rundungsfehlern resultieren: Speziell kann Binär nur diese Zahlen darstellen Als eine endliche Fraktion, wo der Nenner eine Macht von 2 ist. Unglücklicherweise schließt dies nicht die meisten Zahlen ein, die als endliche Fraktion in der Basis 10 dargestellt werden können, wie 0,1. Abgerundet auf 4 Ziffern Abgerundeter Wert als Bruchteil Und so bekommst du schon einen Rundungsfehler, wenn du nur eine Nummer wie 0,1 aufschreibst und sie über deinen Dolmetscher oder deinen Compiler dirigierst. Es ist nicht so groß wie 380 und kann unsichtbar sein, weil Computer nach 23 oder 52 binären Ziffern anstatt 4 abgeschnitten werden. Aber der Fehler ist da und wird Probleme verursachen, wenn man ihn einfach ignoriert. Warum Binary verwenden Auf der untersten Ebene basieren die Computer auf Milliarden von elektrischen Elementen, die nur zwei Zustände haben (meist niedrige und hohe Spannung). Durch die Interpretation dieser als 0 und 1, seine sehr einfach zu bauen Schaltungen für die Speicherung binärer Zahlen und Berechnungen mit ihnen. Während es möglich ist, das Verhalten von Dezimalzahlen auch mit binären Schaltungen zu simulieren, ist es weniger effizient. Wenn Computer Dezimalzahlen intern verwendet haben, haben sie weniger Speicher und sind langsamer auf dem gleichen Niveau der Technologie. Da der Unterschied im Verhalten zwischen Binär - und Dezimalzahlen für die meisten Anwendungen nicht wichtig ist, ist die logische Wahl, Computer auf der Grundlage von Binärzahlen zu bauen und mit der Tatsache zu leben, dass einige zusätzliche Sorgfalt und Aufwand für Anwendungen erforderlich sind, die ein dezimales Verhalten erfordern. Der Floating-Point-Guide Startseite Grundlegende Antworten Referenzen xkcd Number Formats3.10.1.Die Basics Floating Point ruft die Grenzen des Fixpunktes mit einem Format ähnlich wie wissenschaftliche Notation. Eine wissenschaftliche Notationsnummer besteht, wie Sie wahrscheinlich wissen, aus einer Mantisse (3.52 im obigen Beispiel) ein Radix (immer 10) und ein Exponent (3 im obigen Beispiel). Daher ist das allgemeine Format eines wissenschaftlichen Notationswertes: Mantisse x Radix-Exponent Die normalisierte Form hat immer eine Mantisse größer oder gleich 1,0 und weniger als 10,0. Wir können den Wert demormalisieren und in vielerlei Hinsicht ausdrücken, z. B. 35,2 x 10 2 oder 0,00325 x 10 0. Für jede Position verschieben wir die Ziffern der Mantisse relativ zum Dezimalpunkt, wir erhöhen oder verringern den Wert der Mantisse um den Faktor 10. Um dies zu kompensieren, erhöhen oder verringern wir einfach den Exponenten um 1. Denormalisierung ist notwendig, wenn man wissenschaftliche Notationswerte hinzufügt: Die Anpassung der Mantisse und des Exponenten ist auch manchmal notwendig, um die Ergebnisse zu normalisieren. Zum Beispiel 9,9 x 10 2 9,9 x 10 2 ist 19,8 x 10 2, die auf 1,98 x 10 3 normalisiert werden müssen. Ein binäres Floating-System speichert eine signierte binäre Mantisse und einen signierten binären Exponenten und verwendet in der Regel einen Radix von 2. Mit einem Radix von 2 (oder einer beliebigen Potenz von 2) können wir normalisieren und denormalisieren, indem wir die Binärziffern in der Mantisse verschieben und den Integer-Exponenten auf den Radix von 2 einstellen. (Binärziffern in den Mantissenbits nach links verschieben oder Rechts multipliziert oder teilt die Mantisse um 2 n.) 00010 2 x 2 3 01000 2 x 2 1. Die Standard-Gleitkomma-Formate werden von der IEEE-Gesellschaft definiert. Die IEEE-Formate sind etwas komplizierter, die notwendig sind, um den Gleitpunkt im Allgemeinen zu verstehen, also beginnen wir mit einem einfacheren Beispiel hier. 3.10.2 Ein einfaches Floating-Point-Format Angenommen, ein 32-Bit-Floating-Point-Format hat eine 24-Bit-Twos-Komplement-Mantisse, einen 8-Bit-Twos-Komplement-Exponenten und einen Radix von 2. Die allgemeine Struktur ist: Mantisse x 2 Exponent Wo Mantisse ist eine 24-Bit-Doppel-Komplement-Ganzzahl, und Exponent ist ein 8-Bit-Doppel-Komplement-Integer. Das Binärformat ist wie folgt: Tabelle3.3.Floating Point Format Was ist der Wert der folgenden Nummer Die Mantisse ist 000000000000000000010010 oder (2 16) 18. Der Exponent ist 11111100 - (00000011 1) -00000100 -4. Der Wert ist also 18 x 2 -4 Was ist der größte positive Wert, den wir in diesem System darstellen können Der größte positive Wert besteht aus der größten positiven Mantisse und dem größten positiven Exponenten. Die größte Mantisse ist 011111111111111111111111, die in zwei Komplement 2 23 -1 (8388607) ist. Der größte Exponent ist 01111111, der in zwei Komplementen 2 7 -1 (127) ist. Daher ist der größte positive Wert 8388607 x 2 127 1,42 x 10 45. Was ist der zweitgrößte positive Wert Was ist der Unterschied zwischen dem größten und dem zweitgrößten Was ist der kleinste positive Wert Um den kleinsten positiven Wert in der Form Mantisse x zu finden Radix exponent Wir wählen die kleinste positive Mantisse und den kleinsten negativen Exponenten (der negative Exponent mit der größten Größe). Da die Mantisse eine ganze Zahl ist, ist der kleinste positive Wert möglich 1. Da der Exponent ein 8-Bit-Doppelkomplementwert ist, ist der kleinste negative Exponent 10000000 2. Von -2 7 -128. Der kleinste positive Wert ist also 1 x 2 -128. Oder 2.93873587706 x 10 -39. Was ist der zweitkleinste positive Wert Was ist der Unterschied zwischen dem kleinsten und dem zweitkleinsten Repräsentanten -2.75 in diesem Gleitkomma-System. Schonken Sie die Zahl auf Fixpunkt-Binär mit den Methoden, die in den vorhergehenden Abschnitten beschrieben wurden: Multiplizieren Sie mit dem Radix-Exponenten gleich 1: Shift Der binäre Punkt, um die Mantisse eine ganze Zahl zu machen: - (1011 2) Durch Bewegen des Binärpunktes zwei Orte nach rechts, multiplizieren wir die Mantisse mit 2 2. Wir müssen also (Radix-Exponenten) um denselben Faktor teilen: Mantisse und Exponenten in die spezifizierten Formate (Mia-Komplement in diesem Fall): Mantisse: - (000000000000000000001011) 111111111111111111110101 Exponent: -2 10 11111110 Binäre Darstellung 11111111111111111111010111111110 Wie viele verschiedene Werte kann dieses System darstellen 3.10.3.Overflow und Underflow Overflow tritt auf, wenn die Das Ergebnis einer Gleitkommaoperation ist größer als der größte positive Wert oder kleiner als der kleinste negative Wert. Mit anderen Worten, die Größe ist zu groß, um zu repräsentieren. Unterlauf tritt auf, wenn das Ergebnis einer Gleitkommaoperation kleiner als der kleinste positive Wert oder größer als der größte negative Wert ist. Mit anderen Worten, die Größe ist zu klein, um zu repräsentieren. Das Beispiel 32-Bit-Format oben kann nicht repräsentieren Werte größer als etwa 10 45 oder kleiner als etwa 10 -39. Eine Technik, um Überlauf und Unterlauf zu vermeiden, besteht darin, abwechselnde Operationen zu erhöhen, die die Zwischenergebnisse erhöhen und verringern. Anstatt alle Multiplikationen zuerst zu tun, die Überlauf verursachen könnten, oder alle Divisionen zuerst, die Unterströmung verursachen könnten, könnten wir Multiplikationen und Divisionen wechseln, um die Ergebnisse auf dem Weg zu moderieren. Techniken wie diese müssen oft in komplexen wissenschaftlichen Berechnungen verwendet werden. 3.10.4.Kosten des schwimmenden Punktes Alles hat Kosten. Die erhöhte Reichweite und die Fähigkeit, Nicht-Ganzzahlen darzustellen, ist keine Ausnahme. Es gibt nur 2 32 Muster von 32 0s und 1s. Daher gibt es nur 2 32 eindeutige Zahlen, die wir in 32 Bits darstellen können, unabhängig vom Format. Also, wie können wir Zahlen bis zu 10 45 darstellen. Offensichtlich müssen wir etwas dazwischen opfern. Welcher Gleitpunkt für uns ist die verbreitete Anzahl von Binärmustern, die wir zur Verfügung haben, um eine größere Anzahl von Zahlen zu decken. Je größer der Exponent, desto größer die Lücke zwischen aufeinanderfolgenden Zahlen, die wir genau darstellen können. In der Nähe von 0 können wir viele Zahlen in einem kleinen Bereich darstellen. Weit von null, wird es eine ganze Reihe von ganzen Zahlen, die nicht vertreten werden können. Die Genauigkeit eines 32-Bit-Gleitkommawertes ist geringer als die Genauigkeit einer 32-Bit-Ganzzahl. Durch die Verwendung von 8 Bits für den Exponenten, opfern wir diese 8 Bits Präzision. Daher hat unser Beispielformat die gleiche Präzision wie ein 24-Bit-Integer-System. Performance Arithmetik auf Gleitpunkt ist mehrmals langsamer als auf Ganzzahlen. Dies ist eine inhärente Eigenschaft des Formats. Betrachten Sie den Prozess der Hinzufügung von zwei wissenschaftlichen Notationswerten. Ausgleich der Exponenten Fügen Sie die Mantissen hinzu Normalisieren Sie das Ergebnis Jede dieser Operationen nimmt ungefähr die gleiche Zeit in einem Computer wie eine einzelne Integer-Addition. Da Fließkomma wie wissenschaftliche Notation gespeichert ist, können wir erwarten, dass die Gleitkomma-Addition etwa dreimal so lange dauert wie eine ganzzahlige Ergänzung. In Wirklichkeit dauert ein typischer PC etwa 2,5 mal so lang, um einen Gleitkomma-Arithmetik-Befehl auszuführen, wie es die gleiche Integer-Anweisung zu tun hat. Beachten Sie, dass dies nur für Operationen gilt, die entweder mit einem einzigen Integer-Befehl oder einem einzelnen Gleitkommabefehl ausgeführt werden können. Angenommen, ein Programm läuft auf einem 32-Bit-Computer, und es gibt keine Möglichkeit, die Daten innerhalb des Bereichs einer 32-Bit-Ganzzahl darzustellen. In diesem Fall sind mehrere Integer-Anweisungen erforderlich, um ganzzahlige Werte von mehr als 32 Bits zu verarbeiten, und der Geschwindigkeitsvorteil von ganzen Zahlen gilt nicht. Es ist auch in einigen Systemen möglich, dass Gleitkomma - und Integer-Operationen gleichzeitig auftreten können und daher die Verwendung der Gleitkomma-Hardware zu einer besseren Leistung führen kann, als zusätzliche Integer-Operationen auszuführen, während die Gleitkomma-Einheit im Leerlauf sitzt. Dies ist der Fall mit Grafik-Rendering, die mit Fließkomma auf der Grafik-Processing-Einheit (GPU) statt der CPU auftritt. Es wäre nicht sinnvoll, die Rendering-Berechnungen an die CPU zu verschieben, um ganze Zahlen zu verwenden, da dies nur die Arbeitsbelastung für die CPU erhöhen und die Leistung der GPU dazu veranlassen würde, zu verschwenden. Wenn Hardware eine Floating-Point-Unterstützung eingebaut hat, dann können übliche Operationen wie Gleitkomma-Addition, Subtraktion usw. jeweils durch einen einzigen Befehl behandelt werden. Wenn Hardware keine Gleitkommaeinheit (gemeinsam in eingebetteten Prozessoren) hat, müssen Gleitkommaoperationen von Softwareroutinen abgewickelt werden. Daher wird das Hinzufügen von zwei Gleitkomma-Werten Dutzende von Anweisungen, um statt nur eine zu vervollständigen. Diese werden hunderte Male langsamer als ganze Zahlen, und wird ein großes Stück des verfügbaren Programmspeichers verbrauchen. Die meisten Algorithmen können mit Ganzzahlen mit einem kleinen Gedanken umgesetzt werden. Die Verwendung von Gleitkomma ist oft das Ergebnis der schlichten Faulheit. Verwenden Sie nicht Gleitpunkt nur weil seine intuitive. Mehr Stromverbrauch CPUs erreichen ihre maximale Leistungsaufnahme bei intensiven Gleitkomma-Berechnungen. Dies ist in der Regel nicht auf einem Desktop-PC spürbar, kann aber ein Problem auf großen Gittern, bestehend aus Hunderten von PCs, da das Stromnetz, an dem sie angeschlossen sind, nicht entworfen werden, um für ihre maximale Auslosung zu sorgen. Es kann auch ein Problem sein, wenn man einen Laptop auf Akku läuft, während er intensive Berechnungen durchführt. Die Akkulaufzeit bei intensiven Gleitkomma-Berechnungen könnte ein kleiner Bruchteil dessen sein, was es beim Lesen von E-Mails ist, im Internet surfen oder ein Dokument in OpenOffice. Decimal zu Floating-Point-Conversions bearbeiten. Das Conversion-Verfahren Die Regeln für die Umwandlung einer Dezimalzahl in Floating Punkt sind wie folgt: Konvertieren Sie den absoluten Wert der Zahl in Binär, 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