Thursday 21 September 2017

Float Point Number Repräsentation Binär Optionen


Floating PointFixed-Point Numbers Fixpunktnummern sind eine einfache und einfache Möglichkeit, Bruchzahlen mit einer festen Anzahl von Bits auszudrücken. Systeme ohne Gleitkomma-Hardware-Unterstützung verwenden häufig Festkommazahlen, um Bruchzahlen zu repräsentieren. (Systeme ohne Gleitkomma-Hardware-Unterstützung umfassen eine breite Palette an Hardware - von High-End-Fixpunkt-DSPs, FPGAs und teuren kundenspezifischen ASICs, die Streaming-Medien schneller verarbeiten als jede Gleitkomma-Einheit, die jemals an extrem Low-End-Mikrocontroller gebaut wurde ). Der Begriff Fixpunkt bezieht sich auf die Position des Binärpunktes. Der Binärpunkt ist analog zum Dezimalpunkt einer Basis-Zehn-Zahl, aber da dies binärer als dezimal ist, wird ein anderer Term verwendet. Im Binär können Bits entweder 0 oder 1 sein und es gibt kein separates Symbol, um zu bestimmen, wo der Binärpunkt liegt. Allerdings stellen wir uns vor oder nehmen an, dass der Binärpunkt an einer festen Stelle zwischen den bezeichneten Bits in der Zahl liegt. Beispielsweise können wir in einer 32-Bit-Zahl annehmen, dass der Binärpunkt direkt zwischen den Bits 15 (15 liegt, weil das erste Bit 0, nicht 1) und 16 nummeriert ist und 16 Bits für den ganzen Zahlenteil und 16 Bits gibt Der Bruchteil. Man beachte, daß das höchstwertige Bit im ganzen Zahlenfeld allgemein als das Zeichenbit bezeichnet wird, das 15 Bits für die ganze Zahlengrße verlässt. Breite und Präzisionsbearbeitung Die Breite einer Festkommazahl ist die Gesamtzahl der Bits, die für die Festkommazahl zugeordnet sind. Wenn wir den ganzen Teil und den Bruchteil an verschiedenen Lagerorten speichern, wäre die Breite der Gesamtbetrag der Speicherung für die Nummer. Der Bereich einer Festkommazahl ist die Differenz zwischen der minimalen Anzahl und der maximalen Anzahl möglich. Die Genauigkeit einer Festkommazahl ist die Gesamtzahl der Bits für den Bruchteil der Zahl. Weil wir definieren können, wo wir den festen Binärpunkt lokalisieren wollen, kann die Präzision eine beliebige Anzahl bis einschließlich der Breite der Zahl sein. Beachten Sie jedoch, dass je mehr Präzision wir haben, desto weniger Gesamtbereich haben wir. Es gibt eine Reihe von Standards, aber in diesem Buch werden wir n für die Breite einer Festkommazahl, p für die Präzision und R für die Gesamtstrecke verwenden. Nicht alle Zahlen können genau durch eine Festkommazahl dargestellt werden, so dass die nächste Annäherung verwendet wird. Die Formel für die Berechnung der Integer-Darstellung (X) in einem Qm. n-Format einer Float-Nummer (x) ist: Um sie umzuwandeln, wird folgende Formel verwendet: Einige Beispiele im Q3.4-Format: Zufällig ausgewählte Floats: Einige Beispiele in Das (extrem häufige) 1 Q7.8-Format: Da die Position des Binärpunktes ganz konzeptionell ist, ist die Logik zum Hinzufügen und Subtrahieren von Fixpunktnummern identisch mit der Logik, die zum Hinzufügen und Subtrahieren von ganzen Zahlen erforderlich ist. Also, wenn wir eine halbe plus eine halbe im Q3.4-Format hinzufügen, würden wir erwarten zu sehen: Was ist gleich eins wie wir erwarten würden. Dies gilt gleichermaßen für die Subtraktion. Mit anderen Worten, wenn wir Fixpunktzahlen addieren oder subtrahieren, befindet sich der Binärpunkt in der Summe (oder Differenz) genau an der gleichen Stelle wie in den beiden Zahlen, auf denen wir arbeiten. Beim Multiplizieren von zwei 8-Bit-Festkommazahlen benötigen wir 16 Bits, um das Produkt zu halten. Klar, da es im Vergleich zu den Eingängen eine andere Anzahl von Bits im Ergebnis gibt, sollte erwartet werden, dass der Binärpunkt sich bewegt. Allerdings funktioniert es genau so, wie es in dezimal ist. Wenn wir zwei Ziffern in Dezimalzahl multiplizieren, ist die Stelle des Dezimalpunktes N Ziffern links von der rechten Seite der Produkte, wobei N die Summe der Anzahl der Ziffern ist, die sich auf der rechten Seite des Dezimalpunktes im Multiplikator und im Multiplikanden befinden . Also, im Dezimalpunkt, wenn wir 0,2 mal 0,02 multiplizieren, erhalten wir: Der Multiplikator hat eine Ziffer rechts vom Dezimalpunkt, und der Multiplikand hat zwei Ziffern rechts vom Dezimalpunkt. So hat das Produkt drei Ziffern rechts vom Dezimalpunkt (das heißt, der Dezimalpunkt befindet sich drei Ziffern links). Es funktioniert das gleiche in binärer. Aus dem obigen Zusatzbeispiel wissen wir, dass die Nummer eins im Q3.4-Format gleich 0x8 in hexadezimal ist. Da 0x8 mal 0x8 in hex ist 0x0040 (auch in hex), kann das fest-punkt-ergebnis auch erwartet werden 0x0040 - solange wir wissen, wo der binäre punkt befindet. Lets schreibe das Produkt in binär: Da sowohl der Multiplikator als auch der Multiplikanden vier Bits rechts vom Binärpunkt haben, liegt der Ort des Binärpunktes im Produkt um acht Bits nach links. So ist unsere Antwort 00000000.01000000, was, wie wir erwarten würden, gleich einem Viertel ist. Wenn wir wollen, dass das Format der Ausgabe mit dem Format des Eingangs übereinstimmt, müssen wir den Bereich der Eingänge einschränken, um einen Überlauf zu verhindern. Um von Q7.8 zurück zu Q3.4 zu konvertieren, ist eine einfache Sache des Verschiebens des Produktes um 4 Bits. Festpunktnummern werden häufig intern in digitalen Filtern einschließlich FIR - und IIR-Filtern verwendet. Es gibt eine Reihe von praktischen Überlegungen zur Implementierung von FIR - und IIR-Algorithmen unter Verwendung von Festkommazahlen. 2 3 Viele eingebettete Systeme, die Sinuswellen erzeugen, wie zB DTMF-Generatoren, speichern eine Sinus-Tabelle im Programmspeicher. (Sein verwendet für die Annäherung der mathematischen Sinus () und Cosinus () Funktionen). Da solche Systeme oft sehr begrenzte Mengen an Programmspeicher haben, werden häufig Festpunktnummern zwei verschiedene Weisen verwendet, wenn solche Tabellen verwendet werden: die in den Tabellen gespeicherten Werte und die Brads, die verwendet werden, um in diese Tabellen zu indizieren. In der Sinus-Tabelle gespeicherte Werte Bearbeiten In der Tabelle werden typischerweise ein Quadranten der Sinus - und Cosinus-Funktionen gespeichert. Typischerweise handelt es sich um einen Quadranten, bei dem diese Funktionen Ausgangswerte im Bereich von 0 bis 1 erzeugen. Die Werte in solchen Tabellen werden üblicherweise als Festkommazahlen gespeichert - oft 16-Bit-Zahlen im unsignierten Q0.16-Format oder 8-Bit-Zahlen in Unsigned Q0.8 Werte. Es gibt zwei populäre Wege, um die Tatsache zu bewältigen, dass Q0.16 nicht genau 1.0 verarbeiten kann, es behandelt nur Zahlen von 0 bis (1.0-2-16): (a) Skalierung durch genau eine Macht von zwei (in diesem Fall 216 ), Wie die meisten anderen Fixpunktsysteme, und ersetzen (Clip) Werte zu groß, um als den größten Wert zu speichern, der gespeichert werden kann: so wird 0 als 0 dargestellt, 0,5 dargestellt als 0x8000, (1.0-2-16) dargestellt als 0xFFFF und 1.0 abgeschnitten und auch als 0xFFFF dargestellt. 4 (b) Skalierung um den größtmöglichen Wert (in diesem Fall 0xFFFF), so dass sowohl die Maximal - als auch die Minimalwerte genau dargestellt werden können: so wird 0 als 0, (1.0-2-16) dargestellt, dargestellt als 0xFFFE und 1,0 ist Dargestellt als genau 0xFFFF. 5 Ein paar Leute zeichnen ziemlich genaue Kreise und berechnen ziemlich genau Sinus und Cosinus mit einem Bezier Spline. Die Tabelle wird 8 Werte, die eine einzige Bezier-Kurve repräsentieren, die 18 eines Kreises annimmt, und zwar auf eine Genauigkeit von etwa 4 Teilen pro Million oder 14 eines Kreises bis zu einer Genauigkeit von etwa 1 Teil in tausend. 6 7 Viele Menschen bevorzugen die Rotation (wie z. B. Winkel) in Form von Wendungen. Der ganzzahlige Teil der Wendungen erzählt, wie viele ganze Revolutionen geschehen sind. Der Bruchteil der Wendungen, bei Multiplikation mit 360 (oder 1 2 8) unter Verwendung der standardmäßig festgelegten Fixpunkt-Arithmetik, ergibt einen gültigen Winkel im Bereich von -180 Grad (- Bogenmaß) bis 180 Grad (Bogenmaß). In manchen Fällen ist es zweckmäßig, unsigned Multiplikation (anstatt signierte Multiplikation) auf einem binären Winkel zu verwenden, der den richtigen Winkel im Bereich von 0 bis 360 Grad (2 Radiant) ergibt. Der Hauptvorteil bei der Speicherung von Winkeln als Fixpunktbruch einer Wendung ist die Geschwindigkeit. Das Kombinieren eines aktuellen Positionswinkels mit etwas positivem oder negativem Inkrementalwinkel, um die neue Position zu erhalten, ist sehr schnell, auch bei langsamen 8-Bit-Mikrocontrollern: Es dauert eine einzige Integer-Addition und ignoriert den Überlauf. Andere Formate für die Speicherung von Winkeln erfordern die gleiche Ergänzung, plus spezielle Fälle, um die Randfälle von überlaufenden 360 Grad oder unterlaufen 0 Grad zu behandeln. Im Vergleich zu der Speicherung von Winkeln in einem binären Winkelformat, das Speichern von Winkeln in jedem anderen Format - wie etwa 360 Grad, um eine vollständige Umdrehung zu geben, oder 2 Radiant, um eine vollständige Umdrehung zu geben - führt zwangsläufig zu einigen Bitmustern, die Winkel außerhalb dieses Bereichs geben, Erfordert zusätzliche Schritte, um den Wert auf den gewünschten Bereich zu reduzieren, oder führt zu einigen Bitmustern, die überhaupt keine gültigen Winkel (NaN) oder beides sind. Mit einem Binärwinkel-Format in Einheiten von Wendungen können wir schnell (mit Shift-und-Maske, Vermeidung von Multiplikation) trennen die Bits in: Bits, die ganzzahlige Wendungen (ignoriert, wenn man nach dem Sinus des Winkels einige Systeme nie die Mühe, diese zu speichern Bits an erster Stelle) 2 Bits, die die Quadrantenbits repräsentieren, die direkt verwendet werden, um in die Nachschlagtabelle niederwertige Bits kleiner als einen Schritt in die Indextabelle einzutragen (Phasenakkumulatorbits, ignoriert beim Nachschlagen des Sinus des Winkels ohne Interpolation) Die niederwertigen Phasenbits geben eine verbesserte Frequenzauflösung auch ohne Interpolation. Einige Systeme verwenden die niederwertigen Bits, um zwischen den Werten in der Tabelle linear zu interpolieren. 12 Damit können Sie mit einer kleineren Tabelle (mit dem Programmraum) mehr Genauigkeit erhalten, indem Sie einige Zyklen auf diese zusätzliche Interpolationsberechnung einbringen. Ein paar Systeme erhalten noch mehr Genauigkeit mit einer noch kleineren Tabelle, indem sie noch ein paar Zyklen opfern, um diese niederwertigen Bits zu verwenden, um die kubische Interpolation zu berechnen. 4 Vielleicht ist das häufigste Binärwinkel-Format Brads. Brads Edit Viele eingebettete Systeme speichern den Winkel, den Bruchteil der Wendungen, in einem einzigen Byte-Binärwinkelformat. 13 Es gibt mehrere Möglichkeiten, den Wert in diesem Byte zu interpretieren, was alle (mehr oder weniger) denselben Winkel bedeutet: ein Winkel in Einheiten von Brads (Binärradianer), die als 8-Bit-Ganzzahl ohne Vorzeichen gespeichert sind, von 0 bis 255 Brads an Winkel in Einheiten von Brads, die als 8-Bit-Ganzzahl unterzeichnet sind, von -128 bis 127 Brads einen Winkel in Einheiten von Windungen, die als Bruchwende im unsigned Q0.8-Format gespeichert sind, von 0 bis knapp 1 volle Umdrehung ein Winkel in Einheiten Von Wendungen, gespeichert als eine Bruchwende im signierten Q0.7 () Format, von -12 bis knapp 12 volle Umdrehung Eine volle Umdrehung 14 ist 256 Brads 15 ist 360 Grad. Wenn ein einzelnes Byte nicht genügend Genauigkeit gibt, kann das Brad-System leicht mit mehr Bruchstücken verlängert werden - 65.536 Zählungen pro Umdrehung können in 16 Bits dargestellt werden. 16 Für weiteres Lesen EditDecimal 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 auf meiner Website diskutiert.) Für alle Eingaben, die akzeptiert werden, aber die Ausgabe ist korrekt (ungeachtet aller Fehler, die meiner umfangreichen Prüfung entgehen).Binäre Fraktionen Während sie das gleiche in arbeiten Prinzip 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 führen: Insbesondere kann Binär nur diese Zahlen als endliche Fraktion darstellen, wo der Nenner ist Eine Macht von 2. Leider enthält dies nicht die meisten der Zahlen, 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. Die Floating-Point-Anleitung Home Grundlegende Antworten Referenzen xkcd Zahlenformate

No comments:

Post a Comment