Command Palette

Search for a command to run...

IEEE 754 Konverter: Sehen Sie, wie Schwimmer wirklich gespeichert werden

IEEE 754 Konverter: Sehen Sie, wie Schwimmer wirklich gespeichert werden

T
Toolz Team
|Aug 23, 2026|16 min lesen

Teil der Sammlung binär & hex

Das erste Mal ein 0.1 + 0.2 === 0.3 Bug hat mich in der Produktion gebissen, ich habe getan, was die meisten Entwickler tun: Ich habe gesucht, gefunden & quot; schwebender Punkt ist seltsam, & quot; und weitergegangen Es war Jahre, bevor ich tatsächlich die Bits betrachtete und verstand, warum. Sobald ich es tat, hörte eine ganze Kategorie numerischer Fehler auf, mysteriös zu sein Dieser Leitfaden geht durch das, was Ihnen ein IEEE 754-Konverter zeigt, indem er die IEEE 754 Konverter Auf Toolz.dev, und warum das Anstarren auf das Vorzeichen, den Exponenten und die Mantisse der schnellste Weg ist, eine echte Intuition darüber zu entwickeln, wie Computer Dezimalstellen speichern.

tl; dr: Computer speichern Gleitkommazahlen als Vorzeichen, eine Zweierpotenz und einen Bruchzeichenbezeichnenden, dem Standard IEEE 754 folgend Ein IEEE 754-Wandler kodiert eine Dezimalzahl wie 3,14159 in genau diese Bits und dekodiert Bits wieder auf einen Wert Die IEEE 754 Konverter Tut beides, für einfache und doppelte Präzision, vollständig in Ihrem Browser, wobei das Vorzeichen, der Exponent und die Mantisse herausgebrochen sind.

Was ist IEEE 754?

IEEE 754 ist der Standard, der erstmals 1985 veröffentlicht und überarbeitet wurde IEEE 754-2019, das definiert, wie Computer Gleitkommazahlen binär darstellen Fast jede CPU, GPU und Programmiersprache folgt ihr, weshalb ein double Verhält sich in C, Java, Python und JavaScript gleich Wenn Leute sagen & quot; schwebender Punkt, & quot; sie bedeuten fast immer IEEE 754 binärer Gleitkomma.

Die Kernidee ist, dass eine Zahl in drei Teilen gespeichert wird Es gibt ein Vorzeichenbit, das positiv oder negativ sagt Es gibt einen Exponenten, der den Wert um eine Zweierpotenz skaliert Und es gibt eine Mantisse, auch Bruch oder Signifikand genannt, die die genauen Ziffern zusammenhält, eine Normalzahl ist Vorzeichen mal 1. Mantisse mal 2 zum Exponenten Es ist wissenschaftliche Notation, in Basis zwei, gepackt in eine feste Anzahl von Bits.

Die beiden Formate, die Sie täglich treffen, sind Einzelpräzision, binär32 genannt, und Doppelpräzision, binär64 genannt Single verwendet 1 Vorzeichenbit, 8 Exponentenbits und 23 Mantissenbits, für 32 Bit insgesamt Double verwendet 1 Vorzeichenbit, 11 Exponentenbits und 52 Mantissenbits, für insgesamt 64 Bit Double ist der Standard-Gleitkommatyp in den meisten Sprachen; Single ist auf GPUs und im speicherempfindlichen Code üblich.

Was macht eigentlich ein IEEE 754 Konverter?

Ein IEEE 754-Wandler nimmt eine Zahl und zeigt Ihnen sein genaues Bitmuster, aufgeteilt in diese drei Felder, zusammen mit der Hexadezimalform und dem aus den Bits zurückgelesenen Wert. Es funktioniert auf beide Arten: Geben Sie eine Dezimalzahl ein, um es zu kodieren, oder fügen Sie ein Binär- oder Hex-Bitmuster ein, um es wieder in die Zahl zu dekodieren, die es darstellt.

Auf Toolz.dev ist der Workflow kurz Wählen Sie einfache oder doppelte Genauigkeit, ob Ihre Eingabe eine Dezimalzahl, ein Hex-Bit-Muster oder ein Binär-Bit-Muster ist Geben Sie den Wert ein Das Werkzeug zeigt das Vorzeichenbit, das Exponentenfeld, die Mantisse, die vollen Bits, das Hex, sowohl den voreingenommenen als auch den unvoreingenommenen Exponenten, und den genauen gespeicherten Wert an Jedes Feld hat eine Kopiertaste.

Der Grund, sich das alles anzusehen, anstatt der Zahl zu vertrauen, die Ihre Sprache druckt, ist, dass die gedruckte Zahl durch Auslassung liegt Wenn Ihre Konsole angezeigt wird 0.1„Es zeigt Ihnen ein abgerundetes, freundliches Rendering. Die Bits sagen Ihnen, was wirklich gespeichert ist, und der Unterschied zwischen diesen beiden besteht darin, wo Gleitkommafehler leben.

Warum ist 0,1 plus 0,2 nicht gleich 0,3?

Das ist das kanonische Beispiel, und der Konverter macht es konkret Der Wert 0,1 lässt sich nicht exakt im binären Gleitkomma darstellen, aus dem gleichen Grund kann 1/3 nicht exakt in Dezimalzahl geschrieben werden In Basis zehn ist 1/3 0,3333... für immer In Basis zwei ist 0,1 ein sich wiederholender Bruch, der niemals endet, also muss er gerundet werden, um in 52 Mantissenbits zu passen.

Dekodieren Sie das Double für 0,1 und der Wert, den die Bits tatsächlich halten, ist 0,10000000000000551151231257827021181583404541015625. Das Double für 0,2 ist ebenfalls ein Haar zu groß. Addieren Sie die beiden gerundeten Werte und das Ergebnis ist ein winziges bisschen mehr als 0,3, aber das Double für 0,3 ist ein kleines bisschen weniger, also sind beide nicht gleich Nichts ist gebrochen Jeder Schritt macht genau das, was IEEE 754 erfordert, und der Konverter lässt Sie dabei zusehen.

Wenn man das gesehen hat, folgt der Fix natürlich: Niemals Floats auf exakte Gleichheit vergleichen Innerhalb einer kleinen Toleranz vergleichen, oder ganzzahlige Cent für Geld verwenden, oder eine Dezimalbibliothek, wenn man exakte Dezimalarithmetik braucht Der Bug war nie in der Addition Es war in der Erwartung eines Binärformats, Dezimalbrüche exakt zu speichern.

Was sind das Vorzeichen, der Exponent und die Mantisse?

Jedes Feld hat einen bestimmten Auftrag und der Konverter beschriftet alle drei.

Das Vorzeichenbit ist das einfachste: 0 bedeutet positiv, 1 bedeutet negativ, weil das Vorzeichen ein separates Bit ist, hat IEEE 754 sowohl eine positive als auch eine negative Null, die sich in Vergleichen gleich verhalten, aber unterschiedliche Bits tragen.

Das Exponentenfeld speichert eine Zweierpotenz, jedoch mit einer hinzugefügten Vorspannung, um negative Exponenten ohne separates Vorzeichen darstellen zu können Die Vorspannung beträgt 127 für die einzelne Genauigkeit und 1023 für das Doppelte. Ein gespeichertes Exponentenfeld von 127 in der einzelnen Genauigkeit bedeutet also einen tatsächlichen Exponenten von Null. Der Toolz.dev-Wandler zeigt beide Zahlen: den voreingenommenen Wert, der in den Bits lebt, und die unvoreingenommene Zweierpotenz, die er tatsächlich anwendet Diese Unterscheidung stolpert viele Leute, weshalb das Werkzeug es buchstabiert, anstatt Sie im Kopf subtrahieren zu lassen.

Die Mantisse hält den Bruchteil des Signifikanten Für eine Normalzahl gibt es eine implizite führende 1, die nicht gespeichert wird, denn ein normalisierter binärer Signifikand beginnt immer mit 1, das Format erhält also ein freies Stück Präzision, indem es weggelassen wird Deshalb ergibt die einfache Genauigkeit etwa 7 Dezimalstellen und die doppelte etwa 15 bis 16, obwohl die Mantissenfelder 23 und 52 Bit betragen.

Hier, wie die beiden Formate Feld für Feld aufgereiht werden:

Eigentum Single (binär32) Doppel (binär64)
Gesamtbits 32 64
Vorzeichenbits 1 1
Exponentenbits 8 11
Mantissenbits 23 52
Exponentenvorspannung 127 1023
Ca. Dezimalstellen 7 15 bis 16
Trivialname Schweben Doppel

Wie konvertiere ich Bits zurück in eine Dezimalzahl?

Die Dekodierung ist genauso nützlich wie die Kodierung, und so liest man einen Wert aus einem Speicherauszug, einem binären Dateiformat oder einem Netzwerkprotokoll, das Roh-Floats speichert. Legen Sie den Eingabetyp auf Hex oder Binär fest und fügen Sie das genaue Bitmuster ein, das die Präzision erwartet: 8 Hex-Ziffern oder 32 Bit für Einzel-, 16 Hex-Ziffern oder 64 Bit für Doppel.

Zum Beispiel das Single-Precision-Hex 40490FDB Dekodiert auf 3.1415927, dem Schwimmer, der Pi am nächsten kommt. Der Konverter akzeptiert auch eine optionale Option 0x Präfix und ignoriert Leerzeichen und Unterstriche, so können Sie gruppierte Bytes einfügen, wie Sie sie finden Wenn Sie ihm die falsche Anzahl von Ziffern geben, sagt es Ihnen genau, wie viele diese Präzision benötigt, anstatt stillschweigend zu kürzen, was die Art von Fehlermeldung ist, die ich wünsche mehr Werkzeuge, die sich die Mühe machen zu schreiben.

Diese Dekodierrichtung paart sich auf natürliche Weise mit einem Allgemeinen Zahlenbasiskonverter Wenn Sie einen Wert zwischen Dezimal-, Hex-, Binär- und Oktalwert ohne Gleitkommainterpretation und mit verschieben müssen Binärübersetzer Wenn man mit Text statt mit Zahlen arbeitet, greife ich oft genug nach allen dreien, dass sie in der gleichen Ecke meiner Lesezeichen wohnen.

Wie werden Unendlichkeit, NaN und Null dargestellt?

Bei den Sonderwerten wird IEEE 754 clever und der Konverter identifiziert jeden Fall für Sie, sodass Sie sich die Muster nicht merken müssen.

Das Exponentenfeld fungiert als Schalter, wenn jedes Exponentenbit 1 ist, befindet man sich im speziellen Bereich: Eine Mantisse ganz Null bedeutet Unendlich, und jede Mantisse ungleich Null bedeutet NaN, keine Zahl Positive und negative Unendlichkeit unterscheiden sich nur durch das Vorzeichenbit NaN erhält man aus Operationen wie Null geteilt durch Null oder der Quadratwurzel eines Negativs, und es hat die berühmte Eigenschaft, dass es sich nicht selbst gleicht.

Wenn jedes Exponentenbit 0 ist, befindet man sich im anderen speziellen Bereich: Eine Mantisse ganz Null ist Null, positiv oder negativ abhängig vom Vorzeichenbit, und eine Mantisse ungleich Null ist eine subnormale Zahl Subnormale füllen die Lücke zwischen Null und der kleinsten Normalzahl, Handelspräzision für die Fähigkeit, sehr winzige Größen darzustellen Sie verwenden einen effektiven Exponenten von Eins minus der Vorspannung, und sie lassen die implizite führende 1 fallen, die der Konverter berücksichtigt, wenn er den unvoreingenommenen Exponenten zeigt.

Alles andere, wo das Exponentenfeld weder alle Nullstellen noch alle Einsen ist, ist eine normale Zahl, einen Blick auf ein Bitmuster werfen zu können und sofort zu wissen, welchen dieser fünf Fälle Sie betrachten, ist eine echte Debugging-Supermacht, wenn eine Berechnung einen Wert ergibt, den Sie nicht erwartet haben.

Wann brauche ich das eigentlich?

Man braucht es öfter als man vermuten würde, wenn man erst einmal weiß, dass man hinschaut Ich greife danach, wenn ein numerisches Ergebnis durch einen Rundungsfehler ausgeschaltet ist und ich möchte bestätigen, ob der Wert genau darstellbar ist Ich verwende es beim Schreiben oder Debuggen eines binären Serializers, eines Dateiformats oder eines Drahtprotokolls, das Floats speichert, damit ich überprüfen kann, ob die Bytes mit dem übereinstimmen, was ich beabsichtigt habe. Es ist unverzichtbar, wenn man einfache und doppelte Präzision vergleicht, zum Beispiel entscheidet, ob ein GPU-Shader verwendet werden kann float Ohne zu viel Genauigkeit zu verlieren Und es ist eines der klarsten Lehrmittel, die ich für Computerarchitektur kenne, denn die Felder zu sehen, macht den abstrakten Standard greifbar.

Wenn man so über den Stack baut, wie ich es tue, zeigt sich an überraschenden Stellen Gleitkomma: Eine Preisberechnung in einer Laravel API, eine Canvas Animation in React, ein CSV Export, der eine Koordinate verstümmeltDas Verständnis des Speicherformats ist eine kleine Investition, die sich über alle hinweg auszahltIch habe darüber geschrieben, wie solche Tools in ein breiteres Kit im passen Webentwickler-Toolkitund das Nummer Basiswandlerführung und Binärübersetzer-Leitfaden Die benachbarten Tiefbauumbauten tiefer abdecken.

Wo liegen die Grenzen der Gleitkomma-Präzision?

Wenn man die Bits sieht, hören die Grenzen des Formats auf abstrakt zu sein Ein Double hat 52 gespeicherte Mantissenbits plus die implizite führende 1, die auf ungefähr 15 bis 16 signifikante Dezimalstellen aufpasst Drücken Sie daran vorbei und die Präzision verdunstet leise Die größte ganze Zahl, die ein Doppel darstellen kann, mit jedem Wert dazwischen ist immer noch exakt 2 hoch 53, das ist 9007199254740992. Fügen Sie eins dazu hinzu und das Ergebnis rundet zurück nach unten, denn der nächste darstellbare Wert ist zwei entfernt, nicht eins. Deshalb legen Sprachen, die für alle Zahlen, JavaScript darunter, doppelt verwenden, ein Number.MAX_SAFE_INTEGER Konstant auf genau diesem Wert und warum große Datenbank-IDs, die als JSON-Nummern gesendet werden, stillschweigend beschädigt werden können.

Die Lücke zwischen einem darstellbaren Wert und dem nächsten wird als Einheit an letzter Stelle bezeichnet, oder ULP, und sie wächst mit wachsender Größe Nahe 1,0 ist die Lücke winzig; nahe einer Milliarde sind es einige Hundert; nahe dem maximalen Doppel, etwa 1,8 mal 10 bis zum 308., ist die Lücke zwischen Nachbarn astronomisch groß Der Konverter macht dies sichtbar: Kodieren Sie zwei nahegelegene große Zahlen und Sie werden oft feststellen, dass sie dieselben Bits teilen, denn es gibt einfach keine Darstellung zwischen ihnen Das Verstehen von ULP hält Sie davon ab, mehr Auflösung zu erwarten, als das Format geben kann.

Eine verwandte Falle ist die katastrophale Aufhebung Wenn Sie zwei nahezu gleiche Gleitkommazahlen subtrahieren, heben sich die führenden Ziffern auf und Sie haben die Bits niedriger Ordnung übrig, die von Anfang an der am wenigsten genaue Teil waren. Das Ergebnis kann durch Rundungsfehler dominiert werden, obwohl jede Eingabe präzise aussah. Aus diesem Grund ordnet numerisch sorgfältiger Code Operationen neu, um das Subtrahieren enger Mengen zu vermeiden, und warum das Summieren einer langen Liste von Floats in einer naiven Schleife Fehler ansammelt, die bessere Algorithmen wie die Kahan-Summierung vermeiden.

Die praktischen Erkenntnisse sind konsistent Geld nicht als Float speichern; Ganzzahl-Cent oder einen Dezimaltyp verwenden, weil ein Wert wie 0,10 nicht genau darstellbar ist und sich Fehler über Tausende von Transaktionen zusammensetzen Nicht Floats mit exakter Gleichheit vergleichen; innerhalb einer Toleranz vergleichen, die auf Ihr Problem zugeschnitten ist Und wenn eine sehr große Ganzzahl eine Hin- und Rückfahrt überleben muss, behalten Sie sie als Zeichenfolge oder verwenden Sie einen ganzzahligen Typ mit beliebiger Genauigkeit, anstatt darauf zu vertrauen, dass ein Doppelgänger sie hält Jede dieser Regeln ist leichter zu merken, wenn der Konverter Ihnen gezeigt hat, warum sich das Format so verhält.

Häufig gestellte Fragen

Wie konvertiere ich eine Dezimalzahl in IEEE 754?

Wählen Sie einfache oder doppelte Genauigkeit, halten Sie den Eingabetyp auf Dezimal, geben Sie Ihre Zahl ein und konvertieren Sie Das Tool kodiert den Wert in sein IEEE 754 Bit-Muster und zeigt das Vorzeichenbit, Exponentenfeld, Mantisse, Vollbinär und Hexadezimal an. Alles läuft in Ihrem Browser.

Was ist der Unterschied zwischen einfacher und doppelter Präzision?

Die Einzelpräzision (binary32) verwendet 32 Bit: 1 Vorzeichen, 8 Exponenten und 23 Mantissen, was etwa 7 Dezimalstellen Präzision ergibt. Die Doppelpräzision (binary64) verwendet 64 Bit: 1 Vorzeichen, 11 Exponenten und 52 Mantissen, was etwa 15 bis 16 Ziffern ergibt. Double ist in den meisten Sprachen der Standard-Float-Typ; Single ist auf GPUs und im speicherbeschränkten Code üblich.

Warum wandelt sich 0,1 nicht in einen exakten Wert um?

0,1 hat keine endliche Darstellung im binären Gleitkomma, ebenso wie 1/3 keine endliche Dezimalzahl hat Das nächstgelegene darstellbare Doppel ist 0,1000000000000005551151231257827021181583404541015625. Der Konverter zeigt den gespeicherten Wert an, der von den Bits zurückgelesen wird, sodass Sie den winzigen Unterschied sehen können, der Rundungsüberraschungen wie 0,1 + 0,2 verursacht, die nicht 0,3 entsprechen.

Was sind das Vorzeichen, der Exponent und die Mantisse?

Das Vorzeichenbit ist 0 für positiv und 1 für negativ Das Exponentenfeld speichert eine Zweierpotenz mit einer hinzugefügten Vorspannung (127 für einfach, 1023 für doppelt), weshalb das Werkzeug sowohl den voreingenommenen Wert in den Bits als auch die von ihm angewendete unvoreingenommene Potenz anzeigt Die Mantisse hält den Bruchteil des Signifikanten, mit einer implizierten führenden 1 für normale Zahlen.

Kann ich IEEE 754 Bit wieder in eine Dezimalzahl umwandeln?

Ja. Setzen Sie den Eingabetyp auf Hex oder Binär und fügen Sie das genaue Bitmuster ein: 8 Hex-Ziffern oder 32 Bit für einfache Genauigkeit, 16 Hex-Ziffern oder 64 Bit für doppelte Das Werkzeug dekodiert es und zeigt den Dezimalwert, den es darstellt, zusammen mit der vollständigen Feldaufschlüsselung an.

Wie werden Unendlichkeit, NaN und Null dargestellt?

Wenn jedes Exponentenbit 1 ist, bedeutet eine Mantisse ganz Null Unendlich und eine Mantisse ungleich Null bedeutet NaN. Wenn jedes Exponentenbit 0 ist, ist eine Mantisse ganz Null Null Null (positiv oder negativ abhängig vom Vorzeichenbit) und eine Mantisse ungleich Null ist eine subnormale Zahl. Der Konverter beschriftet jeden dieser Fälle für Sie.

Ist es sicher, dieses Tool für sensible Zahlen zu verwenden?

Ja. Die Konvertierung läuft komplett in JavaScript in Ihrem Browser Keine Netzwerkanfrage trägt Ihre Eingabe, nichts wird gespeichert, und das Tool funktioniert offline, sobald die Seite geladen wurde, sodass jeder Wert, den Sie eingeben, auf Ihrem Gerät bleibt.

Welches Hex-Format erwartet der Konverter?

Einfache Hexadezimalziffern, mit optionalem 0-fach-Präfix und Leerzeichen oder Unterstrichen für die Gruppierung, die ignoriert werden Einfache Genauigkeit erwartet 8 Hex-Ziffern und doppelte Präzision erwartet 16. Beispielsweise ist 40490 FDB einfachpräzise Pi (3.1415927).


Erkunden Sie die Teile selbst mit dem kostenlosen IEEE 754 Konverter. Es kodiert und dekodiert Floats mit einfacher und doppelter Präzision vollständig in Ihrem Browser, ohne dass etwas hochgeladen wurde.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!