Monday, 12 June 2017

Fixpunkt 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 braucht einen einzigen Integer-Zusatz 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 Zur weiteren Lesung Edit3.7.Binärer Fixpunkt Ein binäres Fixpunktsystem ist ein weiteres Beispiel für ein arabisches Ziffernsystem. Die einzige Unterscheidung von dezimal ist die radix. Binär verwendet einen Radix von 2 anstelle von 10. Wir spezifizieren die Radix (Basis) mit einem Index auf die Zahl. Von nun an nehmen wir keine Basis von 10 an. 1001.101 2 1 2 3 0 2 2 0 2 1 1 2 0 1 2 -1 0 2 -2 1 2 -3 Ein einfacher Weg, um binär zu lesen, ist durch Arbeiten links und Direkt vom Binärpunkt, verdoppeln oder halbieren den Wert der Ziffern bei jedem Schritt: Die Ziffern, die in irgendeinem arabischen System verwendet werden, reichen immer von 0 bis radix-1. Mit größeren Ziffern würde es möglich sein, einen Wert in mehr als einer Weise darzustellen. Wenn zum Beispiel der Binär-Fixpunkt die Verwendung der Ziffer 2 erlaubt hat, dann könnte die Nummer zwei entweder als 2 oder 10 dargestellt werden. 3.7.1.Limitationen von Binary Convert 110 in Binärdatei. Cant getan werden: wie versucht, 13 in dezimal zu vertreten. Es erfordert eine unendliche Anzahl von Ziffern. Dies ist ein Problem für monetäre Berechnungen. Lösungen (BCD, Cents) Home Informatik Verständnis Fixed Point und Floating Point Number Repräsentationen Verständnis Fixed Point und Floating Point Number Repräsentationen In meinem früheren Beitrag lernten wir die grundlegenden Konzepte, wie Binär verwendet werden könnte, um reale Zahlen zu repräsentieren (dh Zahlen mit einem Bruchteil Komponente). Wenn es darum geht, diese Zahlen zu speichern, obwohl es zwei große Ansätze im modernen Computing gibt. Dies sind Fixpunkt-Notation und Fließpunkt-Notation. In der heutigen Post, bauen wir weiterhin unsere Hintergrund Informatik Wissen und Blick auf die Details dieser Speicherformate. Dieses Wissen wird in kommenden Beiträgen nützlich sein, wenn wir in Datentypen die grundlegenden Bausteine ​​einer iOS-Anwendung tauchen. Wie wir in meinem letzten Beitrag gelernt haben, haben gebrochene Binärzahlen zwei Teile, die Bits, die die ganzzahlige Zahl darstellen (das Teil vor dem Radixpunkt) und die Bits, die den Bruchteil darstellen (der Teil nach dem Radixpunkt). Denken Sie darüber nach, was wäre, wenn wir nur eine begrenzte Anzahl von binären Bits hätten, in denen unsere gebrochene Binärzahl gespeichert werden kann. Dies ist in vielen modernen Computernystemen üblich, wie würden wir wissen, wie viele Bits für den Integer-Teil verwendet werden und wie viele Bits zu verwenden sind Für das gebrochene Teil Dies ist das Problem, dass sowohl Fixpunkt - als auch Floating-Point-Notations-Darstellungen versuchen zu lösen. Um loszulegen, dann werfen wir einen Blick auf Fixed Point Notation. Es ist die einfachere der beiden Darstellungen. Fixed Point Representation Fixed Point Notation ist eine Darstellung unserer Bruchzahl, wie sie im Speicher gespeichert ist. In Fixed Point Notation wird die Nummer als signierte Ganzzahl im Zwillings-Komplement-Format gespeichert. Darüber hinaus wenden wir eine fiktive Aufspaltung an, wobei der Radixpunkt (der Trenner zwischen ganzzahligen und gebrochenen Teilen) eine feste Anzahl von Bits links von seiner notationalen Ausgangsposition auf der rechten Seite des niedrigstwertigen Bits lokalisiert wird. Ive illustriert dies in der folgenden Abbildung. Wenn wir die im Speicher gespeicherten Bits der signierten Ganzzahl interpretieren, positionieren wir den Radixpunkt durch Multiplizieren der gespeicherten Ganzzahl mit einem festen Skalierungsfaktor. Der Skalierungsfaktor im Binär wird immer auf einen festen Exponenten angehoben. Da der Skalierungsfaktor eine Potenz von 2 ist, verlagert er den Radixpunkt um eine Anzahl von Orten nach links oder rechts von seiner Ausgangsposition. Bei dieser Umwandlung gibt es drei Richtungen, dass der Radixpunkt verschoben werden kann: Der Radixpunkt wird nach rechts verschoben: Dies wird durch einen Skalierungsfaktor dargestellt, dessen Exponent 1 oder mehr ist. In diesem Fall werden zusätzliche Nullen rechts vom kleinstwertigen Bit angehängt und bedeutet, dass die tatsächlich dargestellte Zahl größer ist als die Binärzahl, die gespeichert wurde. Der Radixpunkt bleibt dort, wo er ist: Dies wird durch einen Skalierungsfaktor dargestellt, dessen Exponent 0 ist und bedeutet, dass der ganzzahlige Wert genau der gleiche ist wie der Integerwert, der dargestellt wird. Der Radixpunkt wird nach links verschoben: Dies wird durch einen Skalierungsfaktor dargestellt, dessen Exponent negativ ist. Dies bedeutet, dass die dargestellte Zahl kleiner ist als die ganzzahlige Zahl, die gespeichert wurde, und bedeutet, dass die dargestellte Zahl eine Bruchkomponente hat. Werfen wir einen Blick auf ein paar Beispiele. Beispiele für Fixpunktnummern Angenommen, wir haben eine 8-Bit-Binärzahl 00011011 2, die im Speicher mit 8 Bits Speicher (also die führenden Nullen) gespeichert ist. In unserem ersten Szenario geht man davon aus, dass diese Zahl als signierte Festkomma-Darstellung mit einem Skalenfaktor von 2 2 gespeichert wurde. Da unser Skalenfaktor größer als 1 ist, verschieben wir den Radixpunkt zwei Stellen nach rechts, wenn wir die im Speicher gespeicherten Bits in die Zahl umsetzen, die wir tatsächlich darstellen. Dies gibt uns die Nummer: 1101100 2 (Beachten Sie die zusätzlichen Nullen, die rechts vom niedrigstwertigen Bit angehängt sind). In unserem zweiten Szenario gehen wir davon aus, dass wir mit der gleichen Binärzahl im Speicher beginnen, aber diesmal gut angenommen, dass es als signierte Fixpunktdarstellung mit einem Skalenfaktor von 2 -3 gespeichert ist. Wenn der Exponent negativ ist, bewegen wir den Radixpunkt drei Orte nach links. Dies gibt uns die Nummer 00011.011 2 Vor - und Nachteile der Festpunktdarstellung Der Hauptvorteil der Verwendung einer Festpunktdarstellung ist die Leistung. Da der im Speicher gespeicherte Wert eine Ganzzahl ist, kann die CPU viele der Optimierungen nutzen, die moderne Rechner eine Ganzzahl-Arithmetik durchführen müssen, ohne sich auf eine zusätzliche Hardware - oder Softwarelogik verlassen zu müssen. Dies wiederum kann zu Leistungssteigerungen und beim Schreiben Ihrer Apps führen, kann daher zu einer verbesserten Erfahrung für Ihre Nutzer führen. Allerdings gibt es einen Nachteil Fixed Point Representationen haben einen relativ begrenzten Bereich von Werten, die sie darstellen können. So wie wir arbeiten die maximalen und minimalen Zahlen, die in einer Festpunktdarstellung gespeichert werden können und bestimmen, ob es für unsere Bedürfnisse geeignet ist. Wir nehmen nur die größten und kleinsten ganzzahligen Werte, die in der angegebenen Anzahl gespeichert werden können Bits und multiplizieren Sie das mit dem Skalenfaktor, der mit unserer Fixpunktdarstellung verbunden ist. Für eine vorgegebene Binärzahl mit b Bits des Speichers mit einem Skalenfaktor von f sind die Maximal - und Minimalwerte, die gespeichert werden können,: Wenn die Nummer, die Sie darstellen möchten, in diesen Bereich passt, dann sind die Dinge großartig. Wenn es nicht so ist, musst du nach einer Alternative suchen. Hier kommt die Floating Point Notation an. Floating Point Notation Floating Point Notation ist eine Alternative zur Fixed Point Notation und ist die Darstellung, die die meisten modernen Computer bei der Speicherung von Bruchzahlen im Speicher verwenden . Floating Point Notation ist ein Weg, um sehr große oder sehr kleine Zahlen genau mit wissenschaftlichen Notation in binär darzustellen. Dabei bietet die Floating Point Representation je nach Skala der von Ihnen verwendeten Zahlen einen variablen Grad an Präzision. Zum Beispiel ist die Präzision, die wir brauchen, wenn wir über den Abstand zwischen Atomen (10 -10 m) sprechen, ganz anders als die Präzision, die wir brauchen, wenn wir über den Abstand zwischen der Erde und der Sonne (10 11 m) sprechen. Dies ist ein großer Vorteil und ermöglicht eine viel breitere Palette von Zahlen dargestellt werden, als es in Fixed Point Notation möglich ist. Floating Point Representation basiert auf wissenschaftlicher Notation. Sie können die wissenschaftliche Notation in der Schule verwendet haben. Wenn wir die wissenschaftliche Notation in der Dezimalzahl verwenden (das Formular, das Sie wahrscheinlich vertraut sind), schreiben wir Zahlen in der folgenden Form: - Mantisse x 10 Exponent In dieser Form gibt es ein optionales Zeichen, das angibt, ob die Gesamtzahl positiv oder negativ ist Durch eine Mantisse (auch bekannt als eine Bedeutung), die eine reelle (gebrochene) Zahl ist, die wiederum mit einer von einem Exponenten aufgeworfenen Zahlbasis (oder Radix) multipliziert wird. Wie wir wissen, ist dezimal diese Zahl Basis 10. Floating Point Representation ist im Wesentlichen wissenschaftliche Notation auf Binärzahlen angewendet. Im Binär ist der einzige wirkliche Unterschied, dass die Nummernbasis 2 anstelle von 10 ist. Wir würden daher Floating Point Numbers in folgender Form schreiben: - Mantisse x 2 Exponent Nun können Sie es nicht realisiert haben, aber wenn wir Zahlen in wissenschaftlicher Sprache schreiben Notation (ob sie binär oder dezimal sind) können wir sie auf verschiedene Weise schreiben. In Dezimalzahl könnten wir schreiben 1,5 x 10 2. 15 x 10 1 und 150 x 10 0 und doch haben alle diese Zahlen genau den gleichen Wert. Das bietet Flexibilität, aber mit dieser Flexibilität kommt auch Verwirrung. Um diese Verwirrung zu lösen, wird ein gemeinsamer Satz von Regeln, die als normalisierte wissenschaftliche Notation bekannt sind, verwendet, um zu definieren, wie Zahlen in der wissenschaftlichen Notation normalerweise geschrieben werden. Normalisierte wissenschaftliche Notation Normalisierte wissenschaftliche Notation ist eine Nomenklatur, die die Art und Weise, wie wir Zahlen in wissenschaftlicher Notation schreiben, standardisiert. In der normalisierten Form haben wir eine einzige Schlüsselregel: Wir wählen einen Exponenten, so dass der absolute Wert der Mantisse größer oder gleich 1 aber kleiner als die Zahlenbasis bleibt. Lasst uns ein paar Beispiele anschauen Wenn wir die Dezimalzahl 50010 hatten und es in wissenschaftlicher Notation schreiben wollten, konnten wir es entweder 500 x 10 0 oder 50 x 10 1 schreiben. In normalisierter Form würden wir also die obige Regel anwenden und den Radixpunkt bewegen, so dass nur eine Ziffer, größer oder gleich 1 und kleiner als (in diesem Fall) 10 links vom Radixpunkt war. In diesem Fall würde dies bedeuten, dass wir unseren Radixpunkt zwei Stellen nach links bewegen, also hatten wir 5,0 x 10. Wir müssten dann unseren Exponenten ausarbeiten. Um zu unserer ursprünglichen Nummer zurückzukehren, müssten wir unseren Radixpunkt zwei Plätze nach rechts verschieben. Denken Sie daran, was wir früher gelernt haben Wenn wir unseren Radix-Punkt nach rechts verschieben müssen, um wieder zu unserer ursprünglichen Zahl zu kommen, bedeutet das, dass der Exponent positiv ist. Das gibt uns: 5,0 x 10 2. Lets Blick auf ein etwas komplizierteres Beispiel, diesmal in binärer. Was wäre, wenn wir die Binärzahl 10.1 2 hätten. Was würde das in der wissenschaftlichen Notation sein. Wir wenden die Regeln an: Wir müssen eine Mantisse haben, die größer oder gleich 1 und kleiner ist als unsere Nummernbasis (was diesmal 2 ist). Das würde bedeuten, dass unsere Mantisse 1.01 x 2 sein muss. Um wieder auf unsere Originalnummer zu kommen, müssten wir unseren Radixpunkt 1 Platz nach rechts verschieben. Was bedeutet richtig bedeutet, dass der Exponent positiv ist. Letztes Beispiel. Diesmal ist das ein bisschen kniffliger, stell dir vor, ich hätte die Nummer 0.111 2 und wollte es in normalisierte wissenschaftliche Notation schreiben. Wiederum wenden wir die Regeln an. Wir brauchen eine Mantisse, die größer oder gleich 1 und kleiner als 2 ist. Das heißt, wir wollen unsere Mantisse als 1.11 x 2 schreiben. Jetzt müssen wir, um wieder zu unserer ursprünglichen Nummer zu kommen, unseren Radixpunkt 1 Platz nach links verschieben . Was haben wir gelernt, uns nach links zu bewegen. Das bedeutet, dass unser Exponent negativ ist. Das gibt uns: 1.11 x 2 -1. IEEE 754 Darstellungen Wie Sie wahrscheinlich schon jetzt ausgearbeitet haben, werden Floating Point Nummern überall im modernen Computing eingesetzt. Ob es sich um den prozentualen Anteil des Marktes handelt, der auf die neueste Version von iOS aktualisiert wurde, die aktuelle Position und Orientierung Ihres iPhone im Weltraum oder die Menge an Geld, das in Ihr Bankkonto fließt, nach dem Release Ihrer neuesten Blockbuster App Breite Verwendung, das Format verwendet, um Floating Point Zahlen im Speicher zu speichern wurde von der Institute of Electrical und Electronic Engineers in etwas namens IEEE 754 standardisiert. Dieser Standard definiert eine Anzahl verschiedener Binärdarstellungen, die bei der Speicherung von Floating Point Numbers im Speicher verwendet werden können: Half Precision 8211 Verwendet insgesamt 16 Bits Speicherplatz. Single Precision 8211 Verwendet insgesamt 32 Bits. Double Precision 8211 Verwendet 64-Bit-Speicher insgesamt. Quadruple Precision 8211 Verwendet 128-Bit-Speicher insgesamt. In jedem dieser Fälle ist ihre Grundstruktur wie folgt: (-1) Zeichen x Mantisse x 2 Exponent Wenn es um die Speicherung von Floating Point Numbers im Speicher geht, werden nur drei kritische Teile dieser Grundstruktur gespeichert: Das folgende Diagramm zeigt diese Teile werden im Speicher abgelegt: Wie ich oben angedeutet habe, haben alle vier Binärdarstellungen, die im IEEE 754-Standard definiert sind, das bedeutendste Bit als Zeichenbit und verwenden es, um das Vorzeichen der Gesamtzahl zu speichern. In ähnlicher Weise zu dem, was wir in früheren Beiträgen gesehen haben, wenn das Zeichenbit klar ist (ein Wert von 0), ist die Gesamtzahl positiv. Wenn das Bit gesetzt ist (ein Wert von 1), ist die Zahl negativ. Der Exponent repräsentiert die Macht, auf die die Mantisse gestoßen wird. Es gibt immer eine feste Anzahl von Exponentenbits bei der Speicherung einer Gleitkomma-Darstellung im Speicher und die genaue Anzahl der verwendeten Bits wird durch die jeweilige IEEE 754-Darstellung (Single Precision, Double Precision etc.) definiert. Schauen Sie sich das doch kurz an. In allen Fällen müssen die Exponenten in jeder dieser Darstellungen sowohl positive Exponenten als auch sehr große Zahlen darstellen können und negative Exponenten (um sehr kleine Zahlen darzustellen). Um die Komplikationen zu vermeiden, die Exponenten in zwei Komplement-Format zu speichern, wird etwas genannt Exponent Bias verwendet. Exponent Bias Exponent Bias ist dort, wo der für den Exponenten gespeicherte Wert vom tatsächlichen Exponentenwert durch eine Bias ausgeglichen wird. Die Vorspannung ist einfach eine Zahl, die dem Exponenten hinzugefügt wird, um sicherzustellen, dass der Wert, der gespeichert wird, immer positiv ist. Die folgende Tabelle zeigt die Anzahl der Bits, die für den Exponenten in jedem der Formate verwendet wurden, der zulässige Wertebereich, den die verschiedenen Exponenten vor dem Anwenden der Bias zusammen mit den erlaubten Werten nach dem Anwenden der Vorspannung haben können: Zusätzlich zu diesen Formaten ist die IEEE 754-Standard definiert auch eine Anzahl von numerischen Symbolen, die es auch wissenswert ist. Nun erforschen Sie diese kurz im nächsten Abschnitt. Sonderwerte, die Zero repräsentieren Wie wir gesehen haben, wenn wir Zahlen im Floating Point darstellen und sie im Speicher speichern, schreiben wir unsere Zahlen in einer normalisierten Form, bevor wir das implizite Set-Bit vor dem Radix-Punkt fallen lassen. Wenn die Zahlen im Speicher interpretiert werden, wird das implizite Bit wieder instal - liert. Diese implizite Annahme, dass das Bit unmittelbar links vom Radixpunkt auf 1 gesetzt ist, verursacht jedoch Probleme. Was wäre, wenn wir nennen wollen Um dieses Problem zu umgehen, definiert der IEEE 754 Standard Null als Spezialfall und stellt ihn mit einem Exponenten von 0 und einer Mantisse von 0 dar. Wegen des noch vorhandenen Vorzeichenbits führt dies zu Werten Von -0 und 0 der Standard definiert, dass sie als gleich verglichen werden müssen. Denormalisierte Form Die IEEE 754 erlaubt auch die Darstellung von Zahlen in einer denormalisierten Form. Wenn die Bits im Exponenten alle Nullen sind, aber die Mantisse kein Wert ungleich Null ist, wird die Zahl in einer denormalisierten Form gespeichert. In diesem Fall wird, wenn die Nummer im Speicher interpretiert wird, die Annahme, dass ein Bit auf der linken Seite des Radix-Punktes gesetzt ist, erneut ignoriert. Dies führt zu Zahlen in der Form: Wo s ist das Zeichen und f ist der Bruchteil der Mantisse. IEEE-Standard definiert auch einen Mechanismus für die Darstellung der Unendlichkeit. Infinity wird durch einen Exponenten mit allen Bits gesetzt und eine Mantisse mit allen Bits gelöscht dargestellt. Wieder bleibt das Zeichen-Bit in Wirklichkeit, was zum Konzept der Unendlichkeit und der Unendlichkeit führt. Nicht eine Nummer (NaN) Die letzte Sache, die im IEEE-Standard interessant ist, ist das Konzept von Not A Number (NaN). Dies wird verwendet, um eine Zahl darzustellen, die keine reelle Zahl ist. Dies wird im Speicher durch einen Exponenten mit allen Bits gesetzt und eine Nicht-Null-Mantisse dargestellt. Am häufigsten werden Sie sehen, dass dies von Ihrem Compiler gemeldet wird, in der Regel, wenn Sie versucht, etwas durch Null zu teilen. Zusammenfassung der Sonderwerte Zusammenfassend zeigt die nachfolgende Tabelle die verschiedenen Werte des Exponenten und der Mantisse sowie die Sonderwerte, die nach der IEEE 754-Norm dargestellt werden: Einführung in die Festpunktnummernrepräsentation Im wirklichen Leben beschäftigen wir uns mit echten Zahlen - Zahlen mit Bruchteil. Die meisten modernen Computer haben native (Hardware) Unterstützung für Gleitkommazahlen. Allerdings ist die Verwendung von Gleitkomma nicht unbedingt die einzige Möglichkeit, Bruchzahlen zu repräsentieren. Dieser Artikel beschreibt die Fixpunktdarstellung von reellen Zahlen. Die Verwendung von Fixpunkt-Datentypen wird weit verbreitet in der digitalen Signalverarbeitung (DSP) und Spielanwendungen verwendet, wo Leistung manchmal wichtiger als Präzision ist. Wie wir später sehen werden, ist die Fixpunkt-Arithmetik viel schneller als die Gleitpunkt-Arithmetik. Erinnern Sie sich, dass eine Binärzahl: den Wert darstellt: 1 2 5 1 2 4 0 2 3 1 2 2 0 2 1 1 2 0 Wenn wir die Zahl 53 um 2 teilen, wissen wir, dass das Ergebnis 26,5 sein sollte. Doch wie können wir es repräsentieren, wenn wir nur ganzzahlige Darstellungen haben. Der Schlüssel zur Darstellung von Bruchzahlen, wie 26.5 ist, ist das Konzept des Binärpunktes. Ein binärer Punkt ist wie der Dezimalpunkt in einem Dezimalsystem. Es handelt sich um einen Teiler zwischen der ganzen Zahl und dem Bruchteil einer Zahl. In einem Dezimalsystem bezeichnet ein Dezimalpunkt die Position in einer Ziffer, die der Koeffizient um 10 0 1 multiplizieren soll. Beispielsweise hat der Koeffizient 6 in der Ziffer 26.5 ein Gewicht von 10 0 1. Was aber mit den 5 bis Das Recht der Dezimalstelle Wir wissen aus unserer Erfahrung, dass es ein Gewicht von 10 -1 trägt. Wir wissen, dass die Ziffer 26.5 quot den Wert sechsundzwanzig und ein halbes Quadrat darstellt, weil 2 10 1 6 10 0 5 10 -1 26.5 Das gleiche Konzept des Dezimalpunktes kann auf unsere binäre Darstellung angewendet werden, was einen quadratischen Punkt bildet. Wie im Dezimalsystem repräsentiert ein Binärpunkt den Koeffizienten des Termes 2 0 1. Alle Ziffern (oder Bits) links vom Binärpunkt tragen ein Gewicht von 2 0. 2 1. 2 2. und so weiter. Ziffern (oder Bits) auf der rechten Seite des Binärpunktes trägt ein Gewicht von 2 -1. 2 -2. 2 -3. und so weiter. Zum Beispiel, die Zahl: repräsentiert den Wert: Nun, Rückruf in der Klasse, diskutieren wir Verschieben einer Ganzzahl nach rechts um 1-Bit-Position ist gleichbedeutend mit der Division der Zahl durch 2. Im Fall von Integer, da wir nicht einen Bruchteil haben , Können wir einfach keine Ziffer rechts von einem binären Punkt darstellen, was diesen Verschiebungsprozess zu einer ganzzahligen Division macht. Allerdings ist es einfach eine Begrenzung der ganzzahligen Darstellungen der Binärzahl. Im allgemeinen wird mathematisch bei einer festen Binärpunktposition das Bitmuster einer Zahl nach rechts um 1 Bit geteilt, wobei immer die Zahl durch 2 dividiert wird. Ähnlich verschiebt eine Zahl nach links um 1 Bit die Zahl um 2 Verschiebung Prozess oben ist der Schlüssel zu verstehen, Fixpunkt Zahl Darstellung. Um eine reelle Zahl in Computern (oder irgendeine Hardware im Allgemeinen) darzustellen, können wir einen festen Punktnummerentyp definieren, indem wir einfach den binären Punkt implizit an einer Position einer Ziffer festlegen. Wir werden uns dann einfach an diese implizite Konvention halten, wenn wir Zahlen vertreten. Um einen festen Punkttyp konzeptionell zu definieren, brauchen wir nur zwei Parameter: Breite der Zahlendarstellung und Binärpunktposition innerhalb der Zahl Wir verwenden die Notation fixedltw, bgt für den Rest dieses Artikels, wobei w die Anzahl der Bits bezeichnet Als Ganzes (die Breite einer Zahl) verwendet, und b bezeichnet die Position der Binärpunktzählung aus dem niedrigstwertigen Bit (Zählen von 0). Beispielsweise bezeichnet fixedlt8,3gt eine 8-Bit-Fixpunktzahl, von der 3 rechte Bits fraktioniert sind. Daher ist das Bitmuster: Wenn wir diese Tabelle betrachten, können wir dann leicht erkennen, dass wir die Zahl -2.5 mit dem Bitmuster quot1011quot darstellen können, wenn wir davon ausgehen, dass der Binärpunkt an Position 1 steht. Inzwischen sollten Sie feststellen, dass Fixpunktnummern sind In der Tat eine enge Beziehung zu ganzzahliger Darstellung. Die beiden unterscheiden sich nur in der Position des Binärpunktes. Tatsächlich können Sie sogar eine ganzzahlige Darstellung als quotenspezifische Fallquote von festen Punktzahlen betrachten, wobei der Binärpunkt auf Position 0 steht. Alle arithmetischen Operationen, die ein Computer auf Integer betreiben kann, können daher auch auf die Fixpunktnummer angewendet werden. Daher ist der Vorteil der Fixpunkt-Arithmetik, dass sie so einfach und effizient sind wie Integer-Arithmetik in Computern. Wir können die gesamte Hardware, die für die Integer-Arithmetik gebaut wurde, wiederverwenden, um reelle Zahlen-Arithmetik mit Fixpunktdarstellung durchzuführen. Mit anderen Worten, Fixpunkt Arithmetik kommt kostenlos auf Computern. Der Nachteil der Fixpunktzahl ist natürlich der Verlust an Reichweite und Präzision im Vergleich zu Gleitkommazahlen. Zum Beispiel ist in einer fixierten x.1gt-Darstellung unser Bruchteil nur genau auf ein Quantum von 0,5. Wir können keine Nummer wie 0,75 darstellen. Wir können 0.75 mit fixedlt8,2gt darstellen. Aber dann verlieren wir den Bereich auf dem Integer-Teil. C hat keine native quottypequot für feste Punktzahl. However, due to the nature of fixed point representation, we simply dont need one. Recall all arithmetics on fixed point numbers are the same as integer, we can simply reuse the integer type int in C to perform fixed point arithmetic. The position of binary point only matters in cases when we print it on screen or perform arithmetic with different quottypequot (such as when adding int to fixedlt32,6gt ). Fixed point is a simple yet very powerful way to represent fractional numbers in computer. By reusing all integer arithmetic circuits of a computer, fixed point arithmetic is orders of magnitude faster than floating point arithmetic. This is the reason why it is being used in many game and DSP applications. On the other hand, it lacks the range and precision that floating point number representation offers. You, as a programmer or circuit designer, must do the tradeoff.

No comments:

Post a Comment