IEEE 754 Umrechner

Dieses Java-Applet dient zur Umrechnung zwischen der Dezimaldarstellung von Zahlen (z.B. "1.02") und den von modernen CPUs verwendeten IEEE 754-Fließkommazahlen. Aus Platzgründen werden nur Zahlen mit einfacher Genauigkeit (32 Bit) dargestellt.
Benutzung: Das Applet dient zur Umrechnung von IEEE-754 Zahlen mit 32-Bit Genauigkeit (single precision). Für Ein- bzw. Ausgabe steht einerseits eine Leiste mit Buttons für jedes einzelne Bit, andererseits diverse Textfelder zur Verfügung. Eingaben in den Textfeldern müssen mit Return abgeschlossen werden, die Anzeige in allen anderen Feldern wird dann aktualisiert. Als zusätzliche Information erscheint der Wert der Floatzahl nach Umwandlung in doppelte Genauigkeit, so dass eventuelle, in der normalen Dezimaldarstellung nicht ersichtliche Rundungsfehler leicht erkannt werden können.
Besondere Werte: Als Eingabe im Dezimalfeld werden auch die Worte "Infinity", "-Infinity" sowie "NaN" erkannt und umgewandelt. Fü "NaN" sind verschiedene Binärdarstellungen zulässig. Zu beachten ist auch, dass es sowohl eine +0 als auch eine -0 gibt.
Umrechnung: Allgemein ergibt sich der Wert einer IEEE-754-Zahl als:
Vorzeichen * 2exponent * mantisse
Das Vorzeichen wird aus Bit 32 gebildet. Der Exponent ergibt sich aus Bits 24-31 durch Subtraktion von 127. Die Mantisse wird aus den restlichen Bits gebildet, wobei eine nicht dargestellte 1 vorangestellt wird. Die tatsächlich dargestellten Bits entsprechen den Nachkommastellen (Wertigkeit 1/2, 1/4, ...), so dass der Wert zwischen 1 und 2 liegt. Eine Ausnahme sind Zahlen mit einem Exponent von -127 (binär 00000000), hier wird für einen fließenden Übergang zum Wert 0.0 hin auf die implizite 1 in der Mantisse verzichtet. Andere Wertebereiche für die Mantisse sind durch Anpassung des Offsets des Exponenten ebenfalls möglich.
Rundungsfehler: Bei Eingabe von "0.1" kann man sehr gut sehen, dass diese Zahl nicht exakt als Fließkommazahl darstellbar ist. Vor allem beim Ändern des letzten Bits wird dies in der Anzeige des entsprechenden double-Wertes deutlich.
FAQ (Frequently Asked Questions):

Lässt sich der Konverter auch ohne Internet-Verbindung nutzen

Man kann die Webseite inklusive dem für das Java-Applet benötigten .class-File auf der Festplatte speichern und von dort öffnen. Als Vereinfachung lassen sich die benötigten Dateien in einem ZIP-File herunterladen (float_applet_offline.zip). Das ZIP-File muss in ein Verzeichnis auf der Festplatte entpackt werden, dann lässt sich die Datei IEEE754de.html mit einem Webbrowser öffnen. Dieser muss natürlich über das Java-Plugin verfügen, damit das Applet funktionieren kann.

Ich benötige den Source-Code, weil ich selber eine Konvertierungsroutine von Format X in Format Y programmieren möchte. Können Sie ihn mir schicken?

Der Source-Code für das Applet beinhaltet selber keine Konvertierungsroutinen für IEEE754. Die Umwandlung einer Fließkommazahl in ihr Bitmuster ist auch nur eine andere Interpretation des gleichen Speicherinhalts, die etwa in C/C++ mit typecasts zu erreichen ist. In Java kann die Methode java.lang.Float.floatToIntBits benutzt werden. Die Umwandlung zwischen einem String (beispielsweise dem 7 Zeichen langen String "3.14159") in eine Fließkommazahl (mit 32-Bit) wird ebenfalls von Bibliotheksroutinen ausgeführt. Details hierzu lassen sich beispielsweise in dem Sourcecode für Standard C-Bibliotheken herausfinden (etwas der GNU libc, FreeBSD libc oder uclibc - bitte auch die entsprechenden Lizenzen beachten), aber das ist etwa komplizierter.

Meine eigene Konvertierung kommt aber zu einem anderen Ergebnis, der Konverter muss falsch sein!

(OK, das ist nich wirklich eine Frage, aber solche Mails kommen auch gelegentlich). Prinzipiell können natürlich auch bei dem Konverter-Applet Fehler nicht ausgeschlossen werden, allerdings sind die verwendeten Bibliotheksroutinen (siehe oben) ziemlich zuverlässig und genau. Bisher waren bei genauerer Betrachtung immer die anderen Konvertierungen ungenauer. In der Regel sind das ohnehin nur Abweichungen im letzten Bit, es empfiehlt sich mal die Differenz des Double-Precision-Wertes und der gewünschten Dezimalzahl bei den beiden in Frage kommenden Bitmustern zu betrachten.