JavaRush /Java-Blog /Random-DE /Was steckt in einer Gleitkommazahl und wie funktioniert s...
Ivan
Level 2
Харьков

Was steckt in einer Gleitkommazahl und wie funktioniert sie?

Veröffentlicht in der Gruppe Random-DE

Inhalt:

Bild: http://pikabu.ru/

Einführung

Gleich in den ersten Tagen, als ich Java lernte, stieß ich auf eine so seltsame Art von Grundelementen wie Gleitkommazahlen. Ich war sofort an ihren Funktionen interessiert und vor allem an der Art und Weise, wie sie im Binärcode geschrieben waren (der miteinander verbunden ist). Im Gegensatz zu jedem Bereich von ganzen Zahlen gibt es selbst in einem sehr kleinen Bereich (z. B. von 1 bis 2) unendlich viele davon. Und da die Speichergröße endlich ist, ist es unmöglich, diese Menge auszudrücken. Wie werden sie also binär ausgedrückt und wie funktionieren sie? Leider haben mir die Erklärungen im Wiki und ein ziemlich cooler Artikel über Habré hier kein vollständiges Verständnis vermittelt, obwohl sie den Grundstein gelegt haben. Die Erkenntnis kam erst, als ich diesen Analyseartikel am Morgen nach der Lektüre las.

Ausflug in die Geschichte

( aus diesem Artikel über Habré entnommen ) In den 60er und 70er Jahren, als Computer groß und Programme klein waren, gab es noch keinen einheitlichen Standard für Berechnungen und auch keinen Standard für die Darstellung der Gleitkommazahl selbst. Jeder Computer machte es anders und jeder hatte seine eigenen Fehler. Doch Mitte der 70er Jahre beschloss Intel, neue Prozessoren mit unterstützter „verbesserter“ Arithmetik herzustellen und diese gleichzeitig zu standardisieren. Die Professoren William Kahan und John Palmer (nein, nicht der Autor von Büchern über Bier) wurden mit der Entwicklung beauftragt. Es gab etwas Drama, aber es wurde ein neuer Standard entwickelt. Jetzt heißt dieser Standard IEEE754

Fließkommazahlenformat

Schon in Schulbüchern war jeder mit der ungewöhnlichen Schreibweise sehr großer oder sehr kleiner Zahlen der Form 1,2 × 10 3 oder 1,2 E3 konfrontiert, was 1,2 × 1000 = 1200 entspricht . Dies wird als exponentielle Notationsmethode bezeichnet. In diesem Fall handelt es sich um den Ausdruck einer Zahl nach der Formel: N=M×n p , wobei
  • N = 1200 - die resultierende Zahl
  • M = 1,2 - Mantisse - Bruchteil, ohne Berücksichtigung von Ordnungen
  • n = 10 ist die Basis der Ordnung. In diesem Fall und wenn es sich nicht um Computer handelt, ist die Basis die Zahl 10
  • p = 3 - Grad der Basis
Sehr oft wird angenommen, dass die Basis der Ordnung 10 ist und nur die Mantisse und der Wert der Basis geschrieben werden, getrennt durch den Buchstaben E. In unserem Beispiel habe ich äquivalente Einträge 1,2 × 10 3 und 1,2 E3 gegeben . Wenn alles klar ist und wir den nostalgischen Ausflug in den Lehrplan abgeschlossen haben, dann empfehle ich jetzt, dies zu vergessen, denn bei der Bildung einer Gleitkommazahl haben wir es zu tun Zweierpotenzen, nicht Zehnerpotenzen, d.h. n = 2 , die gesamte harmonische Formel 1.2E3 bricht zusammen und hat mir wirklich den Kopf zerbrochen.

Zeichen und Abschluss

Was haben wir also? Dadurch haben wir auch eine Binärzahl, die aus einer Mantisse – dem Teil, den wir potenzieren werden, und der Potenz selbst besteht. Darüber hinaus verfügen Gleitkommazahlen, wie es bei Ganzzahltypen üblich ist, über ein Bit, das das Vorzeichen bestimmt – ob die Zahl positiv oder negativ ist. Als Beispiel schlage ich vor, den Typ zu betrachten float, der aus 32 Bits besteht. Bei Zahlen mit doppelter Genauigkeit doubleist die Logik dieselbe, nur dass es doppelt so viele Bits gibt. Von den 32 Bits ist das höchstwertige Bit dem Vorzeichen zugeordnet, die nächsten 8 Bits sind dem Exponenten zugeordnet – der Potenz, mit der wir die Mantisse erhöhen werden, und die restlichen 23 Bits sind der Mantisse zugeordnet. Schauen wir uns zur Veranschaulichung ein Beispiel an: Was ist in einer Gleitkommazahl enthalten und wie funktioniert sie? 1Das erste Bit ist sehr einfach. Wenn der Wert des ersten Bits 0 ist , ist die Zahl, die wir erhalten, positiv . Wenn das Bit 1 ist , ist die Zahl negativ . Der nächste Block aus 8 Bits ist ein Exponentenblock. Der Exponent wird als reguläre Acht-Bit- Zahl geschrieben, und um den erforderlichen Grad zu erhalten, müssen wir von der resultierenden Zahl 127 subtrahieren . In unserem Fall sind die acht Bits des Exponenten 10000001 . Dies entspricht der Zahl 129 . Wenn Sie eine Frage zur Berechnung haben, finden Sie auf dem Bild eine schnelle Antwort. Eine erweiterte Version kann in jedem Booleschen Algebra-Kurs erworben werden. Was ist in einer Gleitkommazahl enthalten und wie funktioniert sie? - 21×2 7 + 0×2 6 + 0×2 5 + 0×2 4 + 0×2 3 + 0×2 2 + 0×2 1 + 1×2 0 = 1×128 + 1×1 = 128+ 1=129 Es ist nicht schwer zu berechnen, dass die maximale Zahl, die wir aus diesen 8 Bits erhalten können, 11111111 ist . 2 = 255 10 (Index 2 und 10 bedeuten binäre und dezimale Zahlensysteme). Wenn wir jedoch nur positive Exponentenwerte verwenden ( von 0 bis 255 ), dann haben die resultierenden Zahlen viele Zahlen vor dem Komma, aber nicht danach? Um negative Gradwerte zu erhalten, müssen Sie 127 vom generierten Exponenten subtrahieren . Somit liegt der Gradbereich zwischen -127 und 128 . In unserem Beispiel beträgt der erforderliche Abschluss 129-127 = 2 . Erinnern wir uns vorerst an diese Zahl.

Mantisse

Nun zur Mantisse. Es besteht aus 23 Bits, am Anfang ist aber immer eine weitere Einheit impliziert, für die die Bits nicht belegt sind. Dies geschieht aus Zweckmäßigkeits- und Wirtschaftlichkeitsgründen. Dieselbe Zahl kann in verschiedenen Potenzen ausgedrückt werden, indem man vor oder nach dem Dezimalpunkt Nullen zur Mantisse hinzufügt. Am einfachsten lässt sich das mit einem Dezimalexponenten verstehen: 120.000 = 1,2×10 5 = 0,12×10 6 = 0,012×10 7 = 0,0012×10 8 usw. Durch die Eingabe einer festen Zahl im Kopf der Mantisse erhalten wir jedoch jedes Mal neue Zahlen. Nehmen wir an, dass es vor unseren 23 Bits noch eins mit eins geben wird. Normalerweise wird dieses Bit durch einen Punkt vom Rest getrennt, was jedoch keine Bedeutung hat. Es ist einfach bequemer 1. 111000000000000000000000 Was ist in einer Gleitkommazahl enthalten und wie funktioniert sie - 3Nun muss die resultierende Mantisse von links nach rechts potenziert werden, wobei die Potenz bei jedem Schritt um eins verringert wird. Wir beginnen mit dem Wert der Potenz, den wir als Ergebnis der Berechnung erhalten haben, also 2 (ich habe bewusst ein einfaches Beispiel gewählt, um nicht jeden Wert der Zweierpotenz aufzuschreiben, und habe sie auch nicht in der obigen Tabelle berechnet, als die entsprechendes Bit ist Null) Was ist in einer Gleitkommazahl enthalten und wie funktioniert sie - 41×2 2 + 1×2 1 + 1×2 0 + 1×2 -1 = 1×4 + 1×2 + 1×1 + 1×0,5 = 4+2+1+0,5 = 7,5 und habe das Ergebnis 7,5 erhalten , die Richtigkeit kann beispielsweise unter diesem Link überprüft werden

Ergebnisse

Eine Standard-Gleitkommazahl floatbesteht aus 32 Bits, das erste Bit ist das Vorzeichen (+ oder -), die nächsten acht sind der Exponent, die nächsten 23 sind die Mantisse. Durch Vorzeichen – wenn Bit 0 eine positive Zahl ist. Wenn Bit 1 negativ ist. Mit der Exponentialfunktion konvertieren wir bitweise in eine Dezimalzahl (das erste Bit von links ist 128 , das zweite ist 64 , das dritte ist 32 , das vierte ist 16 , das fünfte ist 8 , das sechste ist 4 , das siebte ist 2 ). der Achtel ist 1 ), subtrahieren Sie 127 von der resultierenden Zahl , wir erhalten den Grad, mit dem wir beginnen. Gemäß der Mantisse - zu den vorhandenen 23 Bits vorne fügen wir ein weiteres Bit mit dem Wert 1 hinzu und beginnen daraus mit der Potenz, die wir erhalten haben, wobei wir diese Potenz mit jedem weiteren Bit dekrementieren. Das ist alles, Leute, Kinder! Was ist in einer Gleitkommazahl enthalten und wie funktioniert sie? - 5PS: Hinterlassen Sie als Hausaufgabe anhand dieses Artikels in den Kommentaren Ihre Versionen, warum es bei einer großen Anzahl von Rechenoperationen mit Gleitkommazahlen zu Präzisionsfehlern kommt
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION