Saturday 29 April 2017

Floating Point Mantissen Exponent Binär Optionen


IEEE-Floating-Point-Repräsentation In diesem Artikel ist Microsoft Visual C mit den IEEE-Numerischen Standards konsistent. Es gibt drei interne Sorten reeller Zahlen. Real4 und real8 werden in Visual C. verwendet. Real4 wird mit dem Wort float deklariert. Real8 wird mit dem Wort doppelt deklariert. In Windows 32-Bit-Programmierung, die lange doppelte Datentyp-Karten zu verdoppeln. Es gibt jedoch Assembler-Sprachunterstützung für Berechnungen mit dem realen 10-Datentyp. Die Werte werden wie folgt gespeichert: S steht für das Vorzeichenbit, die X 39s sind die Exponentenbits und die M 39s sind die Mantissenbits. Beachten Sie, dass das linkste Bit in realen 4 und realen 8 Formaten angenommen wird, aber als Zitat in BYTE 3 des Real10-Formats vorliegt. Um den Binärpunkt richtig zu verschieben, löst du zuerst den Exponenten auf und verschiebest dann den Binärpunkt nach rechts oder verlässt die entsprechende Anzahl von Bits. Im Folgenden finden Sie einige Beispiele im Real4-Format: Im folgenden Beispiel ist das Vorzeichen-Bit null und der gespeicherte Exponent ist 128 oder 100 0000 0 im Binär, was 127 plus 1 ist. Die gespeicherte Mantisse ist (1.) 000 0000 0000 0000, die einen impliziten führenden 1 und binären Punkt hat, also die eigentliche Mantisse ist eins. Gleich wie 2, außer dass das Zeichen-Bit gesetzt ist. Dies gilt für alle IEEE-Format-Gleitkommazahlen. Gleiche Mantisse, Exponent erhöht sich um eins (voreingenommener Wert ist 129 oder 100 0000 1 im Binär. Gleicher Exponent, Mantisse ist um halb so hoch (1) 100 0000. 0000 0000, was, da dies eine binäre Fraktion ist, 1 ist 12 (die Werte der Bruchzahlen sind 12, 14, 18 und so weiter) Der gleiche Exponent wie andere Kräfte von zwei, Mantisse ist ein kleiner als zwei bei 127 oder 011 1111 1 in binärer Der voreingenommene Exponent ist 126, 011 1111 0 in binärer, und die Mantisse ist (1.) 100 0000. 0000 0000, die 1 ist 12. Genau das gleiche wie zwei, außer dass das Bit, das 14 repräsentiert, in der Mantisse gesetzt ist, 110 ist eine Wiederholungsfraktion in binärer Die Mantisse ist nur schüchtern von 1,6, und der voreingenommene Exponent sagt, dass 1.6 durch 16 geteilt werden soll (es ist 011 1101 1 in binärer, was 123 in Dezimalzahl ist). Der wahre Exponent ist 123 127 4, was bedeutet, dass die Faktor, um zu multiplizieren ist 24 116. Beachten Sie, dass die gespeicherte Mantisse im letzten Bit aufgerundet wird, um die nicht repräsentierbare Zahl so genau wie möglich darzustellen. (Der Grund dafür, dass 110 und 1100 in Binär nicht genau darstellbar sind, ist ähnlich der Grund dafür, dass 13 in der Dezimalzahl nicht genau darstellbar ist.) 0 1.0 2-128 alle Nullen - ein spezieller Fall.3.10.1. Die Grundlagen Fließkomma ruft die Grenzen des Fixpunktes mit einem Format ähnlich der wissenschaftlichen Notation ab. 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. Batterielebensdauer 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 to Floating-Point Converter über den Dezimal-Floating-Point-Konverter bearbeiten. Dies ist eine Dezimalzahl Zu binären 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 Bugs, die meinem umfangreichen Test entkommen).Decimal to Floating-Point Converter Über die Dezimal to Floating-Point Converter 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).

No comments:

Post a Comment