JavaRush /Java-Blog /Random-DE /Reelle Zahlen im Computerspeicher. Erläuterung.
Marianna
Level 9
Москва

Reelle Zahlen im Computerspeicher. Erläuterung.

Veröffentlicht in der Gruppe Random-DE
Guten Tag! Beim Studium der Vorlesung „Nuancen der Arbeit mit reellen Zahlen“ der ersten Quest (Abschnitt 2. Die Struktur von Gleitkommazahlen) und weiteren Vorlesungen zum Thema sind viele sicherlich auf viele Fragen zu diesem Thema gestoßen. Anfangs habe ich versucht, mir die notwendigen Antworten zu geben, und jetzt biete ich sie Ihnen an, um Ihnen das vollständige Verständnis in einer konsistenten logischen Reihenfolge zu erleichtern. 1. Dezimale und binäre Zahlensysteme. 1.1 Das dezimale Zahlensystem ist eines der gebräuchlichsten Systeme; es ist dasjenige, das wir für alle nicht computergestützten mathematischen Berechnungen in der Schule, an der Universität und im Leben verwenden. Es verwendet die Zahlen 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 (Arabisch) – insgesamt 10 Ziffern. Es gibt auch eine römische Notation für Zahlen, die jedoch heute praktisch nicht mehr verwendet wird. Im Dezimalsystem erfolgt die Zählung in Einheiten, Zehnern, Hundertern, Tausendern, Zehntausenden, Hunderttausenden, Millionen usw. - mit anderen Worten, das sind alle Ziffern der Zahl. Die Ziffer einer Zahl ist die Position (Ort) der Ziffer im Zahlendatensatz. Die niedrigste Ziffer der natürlichen Zahlen (und die niedrigste Wertigkeit ) ist die Einerziffer (ganz rechts). Warum ist er der Unbedeutendste? Denn durch Weglassen der Einerstelle einer Zahl ändert sich die Zahl selbst minimal (zum Beispiel die Zahlen 345 und 340). Als nächstes ist die zweite Ziffer die Zehnerstelle usw. Was bedeutet das alles? Nehmen wir eine beliebige ganze Zahl im Dezimalsystem und zerlegen wir sie in Ziffern . 3297 = 3*1000 + 2*100 + 9*10 + 7 Somit finden wir, dass die Zahl 3297 3 Einheiten der vierten Ziffer (d. h. 3 Tausend), 2 Einheiten der dritten Ziffer (2 Hunderter) und 9 enthält Einheiten der zweiten Ziffer (9 Zehner) und 7 Einheiten der ersten Ziffer . Mit anderen Worten, diese Zahl ist dreitausendzweihundertsiebenundneunzig und ist dementsprechend positionell . Was ist mit den Ziffern gebrochener (reeller) Zahlen? Die Ziffern von Bruchzahlen (ihr Bruchteil) heißen: Zehntel, Hundertstel, Tausendstel, Zehntausendstel usw. Je weiter die Ziffer vom Dezimalpunkt (vom ganzen Teil der Zahl) entfernt ist, desto weniger signifikant ist sie (wenn man sie weglässt, ändert sich der Wert der Zahl kaum). Nehmen wir zum Beispiel eine beliebige Bruchzahl, die als Dezimalzahl dargestellt wird: 25,076 = 2*10 + 5 +0*0,1 + 7*0,01 +6*0,001. Somit finden wir, dass die Bruchzahl 25,076 2 Zehner, 5 Einer, 0 Zehntel enthält , 7 Hundertstel und 6 Tausendstel. Das Dezimalsystem verwendet 10 Ziffern und Vielfache von 10 Stellen – daher der Name „Dezimal“. 1.2 Das binäre Zahlensystem ist ein Zahlensystem, das in fast allen modernen Computern und anderen elektronischen Computergeräten verwendet wird. Zum Aufzeichnen von Zahlen verwendet es nur zwei Ziffern – 0 und 1. Um nicht zu verwechseln, in welchem ​​Zahlensystem die Zahl geschrieben ist, ist es unten rechts mit einem Indikator versehen (es ist die Basis des Zahlensystems ), z Beispiel: 1000₁₀ 1000₂ Hier ist die erste Zahl die bekannte Tausend im Dezimalsystem, und die unterste ist die Zahl im Binärsystem und ist im Dezimalsystem gleich ... 8 ! Wie das Dezimalsystem zerlegt auch das Binärsystem Zahlen in Ziffern . Jede Ziffer einer Binärzahl wird als Bit (oder Ziffer ) bezeichnet. (Wenn es jemanden interessiert: Vier Bits sind ein Halbbyte (oder eine Tetrade), 8 Bits sind ein Byte , 16 Bits sind ein Wort , 32 Bits sind ein Doppelwort .) Bits (Ziffern) werden ebenfalls von rechts nach links nummeriert, beginnend bei Null (im Gegensatz zum Dezimalsystem). Das niedrigstwertige , niedrigstwertige, rechte Bit hat die Sequenznummer 0 . Als nächstes kommt das erste Bit, das zweite usw., je älter das Bit, desto bedeutender ist es (analog zum Dezimalsystem, das wir verstehen – wenn man die Einsen aus der Zahl 1455 entfernt, bleibt die Zahl 1450 übrig - fast gleich dem Anfangswert. Aber wenn man die Hunderter entfernt, bleibt die Zahl 1050 übrig, die schon weit vom Anfangswert entfernt ist, weil die Hunderterstelle viel bedeutender (höher) ist als die Einerstelle ). Beispiel. NOCH NICHT LESEN :))) Reelle Zahlen im Computerspeicher.  IN ENTWICKLUNG!!!  - 2 Unten sind die Bits dieser gebrochenen Binärzahl rot nummeriert – insgesamt haben wir 18 Bits (Ziffern) dieser Zahl. Mit Blick auf die Zukunft möchte ich anmerken, dass Bruchzahlen auf ganz andere Weise im Computerspeicher gespeichert werden – darauf wird später noch eingegangen. In der Zwischenzeit lernen wir, wie man Zahlen von einem Zahlensystem in ein anderes umwandelt. 2. Umrechnung von ganzen Zahlen und Brüchen vom Dezimalsystem in das Binärsystem und umgekehrt. 2.1 Konvertierung von dezimal nach binär. 2.1.1 Ganze Zahlen. Um eine ganzzahlige Dezimalzahl in das binäre Zahlensystem umzuwandeln, müssen Sie diese Zahl durch 2 dividieren und den Rest der Division aufschreiben (er ist immer gleich 0 oder 1, je nachdem, ob die Zahl gerade oder ungerade ist). , und teile das Ergebnis der Division erneut durch 2, schreibe erneut den Rest der Division auf (0 oder 1) und dividiere das Ergebnis der zweiten Division erneut durch 2. Fahren Sie auf diese Weise fort, bis das Ergebnis der Division gleich eins ist. Als nächstes schreiben wir alle resultierenden Nullen und Einsen in umgekehrter Reihenfolge auf , beginnend mit dem aktuellsten Divisionsergebnis, das immer gleich 1 ist. Wichtiger Hinweis. Das Endergebnis der sequentiellen Division einer beliebigen Ganzzahl durch 2 wird immer eins (1) sein! Ist das Ergebnis größer als 1, dividieren wir dieses Ergebnis so lange durch 2, bis wir als Ergebnis eins erhalten. Und das Ergebnis der Division durch 2 kann nur in einem Fall Null (0) sein – das ist die Division von Null selbst durch 2. Beispiel. Lassen Sie uns die Zahl 145 vom Dezimalsystem in das Binärsystem umwandeln . 145/2 = 72 (Rest 1 ) 72/2 = 36 (Rest 0 ) 36/2 = 18 (Rest 0 ) 18/2 = 9 (Rest 0 ) 9/2 = 4 (Rest 1 ) 4/2 = 2 (Rest 0 ) 2/2 = 1 (Rest 0 ) Jetzt „sammeln“ wir unsere Binärzahl in umgekehrter Reihenfolge. Wir erhalten die Nummer 10010001. Fertig! Interessante Nuance 1. Lassen Sie uns die Zahl 1 vom Dezimalsystem ins Binärsystem umwandeln . Im Binärsystem wird diese Zahl auch als 1 geschrieben. Schließlich ist das Endergebnis der Division durch 2, das gleich 1 sein sollte, bereits gleich der Zahl 1 selbst. 1₁₀ = 1₂ Interessante Nuance 2. Lassen Sie uns umrechnen die Zahl 0 vom Dezimalsystem ins Binärsystem. Im Binärsystem wird diese Zahl auch als 0 geschrieben. 0₁₀ = 0₂ 2.1.2 Bruchzahlen. Wie konvertiert man Bruchzahlen in Binärzahlen? Um einen Dezimalbruch in das Binärzahlensystem umzuwandeln, müssen Sie: a) den ganzen Teil des Bruchs gemäß dem in Abschnitt 2.1.1 untersuchten Algorithmus in das Binärsystem umwandeln, b) den Bruchteil des Bruchs mit 2 multiplizieren , schreiben die resultierende Ziffer des Ergebnisses VOR dem Dezimalpunkt (immer gleich 0 oder 1, was logisch ist), multiplizieren Sie dann NUR den Bruchteil des erhaltenen Ergebnisses noch einmal mit 2, notieren Sie die resultierende Ziffer des Ergebnisses VOR dem Dezimalpunkt (0 oder 1) und so weiter bis zum Bruch Ein Teil des Multiplikationsergebnisses wird gleich 0 oder bis die erforderliche Anzahl von Dezimalstellen (erforderliche Genauigkeit ) erreicht ist (entspricht der Anzahl der Multiplikationen mit 2). Dann müssen Sie die resultierende Folge der geschriebenen Nullen und Einsen IN DER REIHENFOLGE nach dem Punkt aufschreiben, der den ganzzahligen und den gebrochenen Teil der reellen (gebrochenen) Zahl trennt. Beispiel 1. Lassen Sie uns die Zahl 2,25 (2 Komma 25 Hundertstel) vom Dezimalsystem in das Binärsystem umwandeln. Im Binärsystem beträgt der Bruch 10,01 . Wie sind wir darauf gekommen? Die Zahl besteht aus einem ganzzahligen Teil (bis zu einem Punkt) – das ist 2 – und einem Bruchteil – das ist 0,25. 1) Übersetzung des gesamten Teils: 2/2 = 1 (Rest 0 ) Der gesamte Teil wird 10 sein . 2) Übersetzung des Bruchteils. 0,25 * 2 = 0,5 (0) 0,5 * 2 = 1,0 (1) Der Bruchteil wurde durch sukzessive Multiplikation mit 2 gleich 0. Wir hören auf zu multiplizieren. Jetzt „sammeln“ wir den Bruchteil IN DER REIHENFOLGE – wir erhalten 0,01 im Binärsystem. 3) Addieren Sie die ganzen und gebrochenen Teile – wir erhalten, dass der Dezimalbruch 2,25 gleich dem Binärbruch 10,01 ist . Beispiel 2. Lassen Sie uns die Zahl 0,116 vom Dezimalsystem in das Binärsystem umwandeln. 0,116 * 2 = 0,232 (0) 0,232 * 2 = 0,464 (0) 0,464 * 2 = 0,928 (0) 0,928 * 2 = 1,856 (1) //den ganzzahligen Teil dieses Ergebnisses verwerfen 0,856 * 2 = 1,712 (1 ) //den gesamten Teil dieses Ergebnisses verwerfen 0,712 * 2 = 1,424 (1) //den gesamten Teil dieses Ergebnisses verwerfen 0,424 * 2 = 0,848 (0) Wie wir sehen können, geht die Multiplikation immer weiter , wird der Bruchteil des Ergebnisses nicht gleich 0. Dann entscheiden wir, dass wir unseren Dezimalbruch mit einer Genauigkeit von 7 Dezimalstellen (Bits) nach dem Komma (im Bruchteil) in Binär umwandeln . Erinnern wir uns daran, was wir über unbedeutende Bits gelernt haben – je weiter das Bit (Bit) vom ganzen Teil entfernt ist, desto leichter fällt es uns, es zu vernachlässigen (Erklärung in Abschnitt 1 der Vorlesung, wer hat das vergessen). Wir erhalten den binären Bruch 0,0001110 mit einer Genauigkeit von 7 Bit nach dem Punkt. 2.2 Konvertierung von binär nach dezimal. 2.2.1 Ganze Zahlen. Um das Ganze zu übersetzenUm eine Zahl aus dem binären Zahlensystem in eine Dezimalzahl umzuwandeln, ist es notwendig, diese Zahl in Ziffern (Bits) zu teilen und jede Ziffer (Bit) mit der Zahl 2 bis zu einem bestimmten positiven Grad zu multiplizieren (dieser Grad beginnt mit der Zählung von rechts nach links, beginnend mit der niedrigsten Wertigkeit). (rechtes Bit) und beginnt bei 0 ). Mit anderen Worten, die Zweierpotenz ist gleich der Anzahl eines bestimmten Bits (diese ungeschriebene Regel kann jedoch nur bei der Konvertierung von ganzen Zahlen angewendet werden , da bei Bruchzahlen die Nummerierung der Bits im Bruchteil beginnt, der übersetzt wird in das Dezimalsystem anders umwandeln ). Als nächstes müssen Sie die resultierenden Produkte addieren . Beispiel. Lassen Sie uns die Binärzahl 110011 in das dezimale Zahlensystem umwandeln. 110011₂ = 1*2⁵ + 1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º = 32 +16 +0 + 0 + 2 + 1 = 51₁₀ Als Ergebnis erhalten wir die Zahl 51 in der binäres System . Zur Information finden Sie unten eine Tabelle der ersten Potenzen der Zahl 2 . NOCH NICHT LESEN :))) Reelle Zahlen im Computerspeicher.  IN ENTWICKLUNG!!!  - 5 ! Bitte beachten Sie, dass die Nullpotenz einer Zahl immer 1 ist. 2.2.2 Bruchzahlen. Um eine binäre gebrochene (reelle) Zahl in eine Dezimalzahl umzuwandeln , müssen Sie: a) ihren ganzzahligen Teil gemäß dem Algorithmus aus Abschnitt 2.2.1 in eine Dezimalzahl umwandeln ; b) Übersetzen Sie seinen Bruchteil wie folgt. Es ist notwendig, den Bruchteil als die Summe der Produkte von Ziffern mal zwei darzustellen , erhöht auf eine bestimmte negative Potenz (die Potenz für die erste Ziffer nach dem Punkt (nach dem ganzen Teil des Bruchs) ist gleich -1). für die zweite Ziffer nach dem Punkt ist gleich -2 usw.) Ergebnis dieser Betrag ist der Bruchteil der Zahl im Dezimalsystem. Beispiel. Lassen Sie uns die Zahl 10111,01 in das Binärsystem umwandeln . 10111,01₂ = (1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º) . (0*2ˉ¹ + 1*2ˉ²) = (16 + 0 + 4 + 2 + 1) . (0 + 0,25) = 23,25₁₀ Als Ergebnis erhalten wir die Zahl 23,25 im dezimalen Zahlensystem. Die Tabelle der ersten negativen Potenzen von 2 ist unten angegeben. NOCH NICHT LESEN :))) Reelle Zahlen im Computerspeicher.  IN ENTWICKLUNG!!!  - 7 2.2.3 Allgemeine Formel zur Umrechnung von Zahlen von binär in dezimal. Geben wir eine allgemeine Formel zum Umwandeln von Zahlen von binär in dezimal an (sowohl ganzzahlige als auch gebrochene Teile). NOCH NICHT LESEN :))) Reelle Zahlen im Computerspeicher.  IN ENTWICKLUNG!!!  - 4 wobei A eine Zahl im binären Zahlensystem ist; Die Basis des Zahlensystems ist 2 (d. h. jedes Bit wird mit 2 hoch multipliziert); N— Anzahl der ganzzahligen Ziffern (Bits) ; m ist die Anzahl der Nachkommastellen (Bits) der Zahl . Das erste Bit des ganzzahligen Teils ab dem Teilungspunkt wird rot hervorgehoben. Es wird immer mit 2 hoch null multipliziert. Das nächste Bit davor (links) wird mit 2 hoch multipliziert usw. Das erste Bit des Bruchteils ab der Teilungsstelle wird grün hervorgehoben. Es wird immer mit 2 hoch minus der ersten Potenz multipliziert. Das nächste Bit rechts wird mit 2 hoch minus einer Sekunde multipliziert usw. 3. Wissenschaftliche Notation: eine normalisierte Notation in beiden Systemen. Mantisse, Exponent, Grad des Exponenten. 3.1 Exponentielle Schreibweise einer Zahl. Zuvor haben wir ein detailliertes Schema zum Aufzeichnen von Positionszahlen nach Ziffern untersucht. Nehmen wir die Zahl 0,0000000000000000000016 . Es hat einen sehr langen Eintrag in Standardform . Und in Exponentialform sieht es so aus: 1,6 * 10ˉ²¹ Was ist also die Exponentialform einer Zahl und wie stellt man eine Zahl in dieser Form dar? Die wissenschaftliche Notation einer Zahl ist eine Darstellung reeller Zahlen als Mantisse und Exponent . Praktisch zur Darstellung sehr großer und sehr kleiner Zahlen sowie zur Vereinheitlichung ihrer Schreibweise. N = M * pⁿ wobei N die zu schreibende Zahl ist, M die Mantisse der Zahl ist , p die Basis ist (gleich der Basis des Zahlensystems der gegebenen Zahl), n (Ganzzahl) die Ordnung (Grad) ist , kann positiv und negativ sein), p hoch n ist die charakteristische Zahl (Exponent, d. h. Basis potenziert (Ordnung)). Eine wichtige Nuance. Wenn der ganzzahlige Teil der Dezimalzahl von 0 abweicht , ist die Ordnung (Grad) des Exponenten positiv . Wenn der ganzzahlige Teil gleich 0 ist , ist der Grad des Exponenten negativ . 3.2 Normale und normalisierte Schreibweise von Zahlen. Die Normalform einer Zahl ist eine Form, bei der die Mantisse (ohne Berücksichtigung des Vorzeichens) auf dem Halbintervall [0,1] liegt, also 0 <= M < 1. Diese Schreibweise hat a Nachteil: Einige Zahlen werden mehrdeutig geschrieben (zum Beispiel kann 0,0001 als 0,000001*10², 0,00001⋅10¹, 0,0001⋅10º, 0,001⋅10ˉ¹ usw. geschrieben werden). Daher ist (insbesondere in der Informatik) eine andere Form der Aufzeichnung weit verbreitet – die normalisierte, bei dem die Mantisse einer Dezimalzahl Werte von 1 (einschließlich) bis 10 (ausschließlich) annimmt, also 1 <= M < 10 (ebenso nimmt die Mantisse einer Binärzahl Werte von 1 bis 2 an ). Mit anderen Worten, die Mantisse im Dezimalsystem muss eine Bruchzahl von 1,0 (einschließlich) bis 10 (ausschließlich) sein , d.h. Der ganzzahlige Teil der Mantisse muss eine einzelne Ziffer enthalten und der Bruchteil ist mathematisch nicht begrenzt. Der Vorteil der normalisierten Form besteht darin, dass somit jede Zahl (außer 0) eindeutig geschrieben wird. Der Nachteil besteht darin, dass es unmöglich ist, 0 in dieser Form darzustellen, sodass die Darstellung von Zahlen in der Informatik ein spezielles Vorzeichen (Bit) für die Zahl 0 vorsieht. 3.3 Beispiele für das Schreiben von Dezimalzahlen in exponentiell normalisierter Form. Schauen wir uns Beispiele an. Beispiel 1. Schreiben wir die Dezimalzahl 1015000 (eine Million fünfzehntausend) in exponentiell normalisierter Form. Das Zahlensystem für diese Zahl ist dezimal, die Basis ist also 10 . Wählen wir die Mantisse aus . Stellen Sie sich dazu die Zahl als Bruch vor, deren Bruchteil gleich Null ist (da die Zahl eine ganze Zahl ist): 1000000,0. Wenn der ganzzahlige Teil der Zahl größer als 0 ist , verschieben Sie den Punkt nach links von seiner Anfangsposition (innerhalb des ganzzahligen Teils), bis nur noch eine Ziffer im ganzzahligen Teil übrig ist . Danach setzen wir einen Punkt. Wir verwerfen unbedeutende Nullen (am Ende der Zahl). Wir erhalten die Mantisse der Zahl gleich 1,015 . Bestimmen wir den Grad (die Ordnung) der Basis der Zahl. Um wie viele Positionen nach links hat sich unser Punkt, der den ganzzahligen Teil vom Bruchteil trennt, verschoben? Für sechs Positionen. Dies bedeutet, dass die Reihenfolge 6 beträgt . In diesem Fall ist die Reihenfolge positiv (wir haben den Punkt im ganzzahligen Teil der Zahl ungleich 0 verschoben). Der endgültige Eintrag in normalisierter Form: 1,015 * 10⁶ . Wir können diese Zahl in dieser Form schreiben: 1,015E6 (wobei E6 der Exponent einer Dezimalzahl ist, also 10 hoch 6). Testen wir uns selbst. Die Exponentialschreibweise für eine Zahl ist nichts anderes als das Produkt einer Zahl (Mantisse) und einer anderen Zahl (Exponent). Was passiert, wenn Sie 1,015 mit 10⁶ multiplizieren? 1,015*10⁶ = 1,015*1000000 = 1015000 . Alles ist richtig. Dieser (normalisierte) Ansatz hilft dabei, einen eindeutigen Datensatz zu erstellenZahlen in Exponentialform, wie oben angegeben. Beispiel 2. Schreiben wir die dezimale reelle Zahl 0,0098 in normalisierter Form. Lassen Sie uns die Basis der Zahl hervorheben – sie ist gleich 10 (Dezimalzahlensystem). Wählen wir die Mantisse der Zahl aus – sie ist gleich 9,8 (der ganzzahlige Teil der Zahl ist gleich Null, was bedeutet, dass wir den Punkt nach rechts zur ersten signifikanten Ziffer verschieben (im Bereich von 1 bis einschließlich 9) . Wir bestimmen die Reihenfolge der Zahl wir haben den Punkt um drei Positionen verschoben, was bedeutet, dass die Reihenfolge 3 ist . Positiv ist es negativ oder negativ? Da wir den Punkt nach rechts verschoben haben (im Bruchteil der Zahl), ist die Ordnung (Potenz) wird negativ sein . Der endgültige Datensatz der Zahl in normalisierter Form ist 9,8 * 10ˉ³ oder 9,8E-3 . Überprüfen wir uns noch einmal. Multiplizieren Sie 9,8 mit 10ˉ³. 9,8 * 10ˉ³ = 9,8 * 0,001 = 0,0098 . Das ist richtig. Beispiel 3. Schreiben wir die dezimale reelle Zahl 3,56 in normalisierter Form. Wählen Sie die Basis der Zahl – sie ist gleich 10 (dezimales Zahlensystem). Wählen Sie die Mantisse der Zahl – sie ist gleich ... 3,56 (die ganze Zahl). Ein Teil der Zahl ist eine einzelne Ziffer, ungleich 0. Dies bedeutet, dass der Punkt nirgendwo verschoben werden muss, die Zahl selbst ist die Mantisse.) Lassen Sie uns die Reihenfolge der Basis hervorheben: Um welche Zahl soll die Mantisse gehen , gleich der Zahl selbst, so multipliziert werden, dass sie sich nicht ändert? Pro Einheit. Dies bedeutet, dass die Bestellung Null ist. Der endgültige Datensatz der Zahl in normalisierter Form ist 3,56 * 10º oder 3,56E0. 4. Speichern reeller Zahlen im Computerspeicher: Float und Double. 4.1 Typen float und double. Kommen wir zum Kernteil unserer Vorlesung. Wie wir bereits wissen, gibt es in Java zwei Arten von reellen Zahlen: float und double . Der Float- Typ belegt 32 Bit im Computerspeicher und kann Werte im Bereich [3,4E-38; 3,4E+38) (mit anderen Worten, im Bereich von 3,4*10ˉ³⁸ (einschließlich) bis 3,4 * 10³⁸ (ausschließlich)). Wichtige Nuance 1. Float-Zahlen können entweder positiv oder negativ sein. Der obige Bereich wird dargestellt, um die im Float-Bereich enthaltenen Zahlenmodule anzuzeigen. Wichtige Nuance 2. 10³⁸ ist ungefähr gleich 2¹²⁷ bzw. 10 ˉ³⁸ ist ungefähr gleich 2ˉ¹²⁷ . Somit kann das Intervall der Absolutwerte von Gleitkommazahlen als [3,4 * 2ˉ¹²⁷; 3,4 * 2¹²⁷). Der Doppeltyp benötigt doppelt so viel Computerspeicher - 64 Bit und kann Dezimalwerte im Bereich [-1,7E+308; 1.7E+308) . 4.2 Exponentiell normalisierte Form von Binärzahlen. Wir wissen, dass Zahlen im Computerspeicher in binärer Form gespeichert werden. Nehmen wir also die Zahl 1560.256 (Float-Typ) und konvertieren sie in Positionsform in das Binärsystem: 11000011000.01000001100 . Sie könnten denken, dass es auf diese Weise im Speicher des Computers gespeichert wird. Aber das ist nicht so! Im Computerspeicher werden die Typen float und double ( echte Gleitkommatypen ) in exponentiell normalisierter Form gespeichert , die Basis der Potenz ist jedoch 2 statt 10. Dies liegt daran, dass, wie oben erwähnt, alle Daten in Der Computer wird in binärer Form (Bits) dargestellt. Einer Nummer wird eine bestimmte Menge Computerspeicher zugewiesen. Stellen wir die positive Zahl 15,2 in normalisierter Exponentialform dar: 1,52*10¹ . Als nächstes stellen wir seinen binären „Zwilling“ 1111.00110011001 ebenfalls in exponentiell normalisierter Notation dar und verwenden dabei denselben Algorithmus: 1) Die Basis ist gleich 2. 2) Die Mantisse ist gleich 1.11100110011001 . 3) Der Grad ist positiv und gleich 3 (der Punkt wird um 3 Bit nach links verschoben) im Dezimalsystem. Konvertieren wir es in das Binärsystem: 11 . In binär exponentiell normalisierter Form wäre es also 1,11100110011001 * 2¹¹. 4.3 Speichern der exponentiell normalisierten Binärform einer Gleitkommazahl im Computerspeicher. Wir haben also herausgefunden, dass eine reelle Zahl im Computerspeicher in exponentiell normalisierter Binärform gespeichert wird . Wie wird es in der Erinnerung aussehen? Nehmen wir den Float- Typ . Der Computer weist jeder Float-Zahl 32 Bit zu . Sie werden wie folgt verteilt . Diese Abbildung zeigt schematisch den zugewiesenen Speicher für eine 32-Bit-Float-Zahl in einem Computer. NOCH NICHT LESEN :))) Reelle Zahlen im Computerspeicher.  IN ENTWICKLUNG!!!  - 5 Die Bitnummerierung wird in Rot angezeigt . Grün zeigt einen zugewiesenen Speicherbereich (1 Bit) zum Speichern des Vorzeichens der Zahl an. Gelb zeigt einen zugewiesenen Speicherbereich zum Speichern der verschobenen Potenz (Ordnung) der Exponentialform der Zahl (8 Bits) an. Blaubezeichnet einen zugewiesenen Speicherabschnitt zum Speichern der normalisierten Mantisse einer Zahl ohne implizite Einheit (23 Bit). Lass uns genauer hinschauen. 1) Vorzeichenbit. Das höchstwertige Bit (erstes von links) wird immer zum Speichern des Vorzeichens der Zahl zugewiesen (1, wenn die Zahl negativ ist, und 0, wenn die Zahl positiv ist). Eine Ausnahme kann die Zahl Null sein – in der Programmierung kann Null sowohl negativ als auch positiv sein . 2) Als nächstes kommen die Bits des Grades (Ordnung) des Exponenten zur Basis 2 . Dafür werden 8 Bits belegt. Der Exponentengrad von Float- Zahlen kann, wie wir wissen, sowohl negativ (für Zahlen, deren ganzzahliger Teil 0 ist, siehe Abschnitt 3.3) als auch positiv (für Zahlen, deren ganzzahliger Teil von Null verschieden ist) sein und reicht von 2ˉ¹²⁷ bis 2¹²⁷ . Theoretisch sollten wir ein Bit zuweisen, um das Vorzeichen des Exponenten zu bestimmen, wie es beim Vorzeichenbit der Fall ist. Aber das ist nicht so. Um kein bisschen mit der Bestimmung des Vorzeichens des Exponenten zu verschwenden, addieren Float-Zahlen einen Offset zum Exponenten von einem halben Byte +127 (0111 1111). Anstelle eines Potenzbereichs von 2ˉ¹²⁷ bis 2¹²⁷ speichert der Computer also einen Potenzbereich von 0 bis +254 – alle Potenzwerte sind positiv , es besteht keine Notwendigkeit, ein zusätzliches Byte für das Vorzeichen zu verschwenden. Es stellt sich heraus, dass der Wert des Exponenten gegenüber dem möglichen Wert um die Hälfte verschoben ist . Das heißt, um den tatsächlichen Wert des Exponenten zu erhalten, müssen Sie diesen Offset von dem im Speicher gespeicherten Wert subtrahieren . Wenn der im Speicher gespeicherte Exponentenwert kleiner als der Offset (+127) ist, ist der Exponent negativ: Das ist logisch. Beispiel. Führen wir eine Verschiebung mit negativem Grad -18 durch . Addieren wir den Offset +127 dazu, erhalten wir den Wert des Grades +108 (den Grad 0 bei der Berechnung nicht vergessen). Lassen Sie uns den Grad in binäre Form umwandeln: 1101100 Aber für den Grad werden 8 Bit Speicher zugewiesen, und hier erhalten wir eine 7-Bit-Zahl. Anstelle der leeren, unbesetzten hohen Ziffer (Bit) fügt der Computer 0 hinzu. Das Ergebnis ist, dass dieser Grad im Speicher des Computers als 01101100 gespeichert wird . Mal sehen: +108 < +127, was bedeutet, dass der Grad tatsächlich negativ ist. Betrachten Sie die folgende interessante Tabelle: Sie zeigt alle möglichen Werte der Potenzen der normalisierten Formen von Float-Zahlen im Binär- und Dezimalsystem. Wie wir sehen können, ist +127 im Binärsystem genau die Hälfte eines ganzen Bytes (8 Bits). 3) Die restlichen 23 Bit sind für die Mantisse reserviert NOCH NICHT LESEN :))) Reelle Zahlen im Computerspeicher.  IN ENTWICKLUNG!!!  - elf. Aber für eine normalisierte binäre Mantisse ist das höchstwertige Bit (auch bekannt als der ganzzahlige Teil der normalisierten Mantisse) immer gleich 1 (genannt implizite Eins ), da die Nummer der Mantisse im Bereich 1<=M<2 liegt (und erinnern Sie sich auch an Absatz 2.1.1 der Vorlesung). Die einzige Ausnahme ist die Zahl 0. Es macht keinen Sinn, eine Einheit in die zugewiesenen 23 Bits zu schreiben und Speicher zu verschwenden, daher wird der Rest der Mantisse (ihr Bruchteil) in die zugewiesenen 23 Bits geschrieben. Es stellt sich heraus, dass im Wesentlichen der signifikante Teil der Float-Zahl eine Länge von 24 hat, wovon ein Bit weniger gespeichert wird. Eine wichtige Nuance. Denken Sie daran, dass sich bei der Umwandlung dezimaler Bruchzahlen in Binärzahlen der Bruchteil im Binärsystem oft als riesig herausstellte. Und wir haben nur 32 Bit, um eine Float-Zahl zu speichern. In diesem Fall werden die niedrigsten, niedrigstwertigen Ziffern des binären Bruchs (denken Sie an Abschnitt 2.1.2 dieser Vorlesung) nicht im zugewiesenen Speicher enthalten und der Computer wird sie vernachlässigen . Die Genauigkeit der Zahl geht verloren , ist aber, wie Sie sehen, minimal. Mit anderen Worten: Die Genauigkeit von gebrochenen Gleitkommazahlen beträgt 6–7 Dezimalstellen. 4.4 Speichern der exponentiell normalisierten Binärform der Zahl double im Computerspeicher. Reelle Zahlen vom Typ Double werden mit Ausnahme einiger Merkmale auf die gleiche Weise im Computerspeicher gespeichert wie Float-Zahlen. Eine doppelte Zahl hat 64 Bit im Computerspeicher. Sie sind wie folgt verteilt (ebenfalls in der Reihenfolge von links nach rechts): 1) Vorzeichenbit (siehe Abschnitt 4.3). Wir gehen davon aus, dass die Nummer dieses Bits 63 sein wird . 2) Abschluss (Ordnung). Zur Speicherung werden doppelten Zahlen 11 Bits zugewiesen . Es wird auch eine Gradverschiebung durchgeführt , bei doppelten Zahlen beträgt sie jedoch +1023. 3) Mantisse (signifikanter Teil). Doppelten Zahlen werden zur Speicherung 52 Bits (Ziffern) zugewiesen. Außerdem wird der genaue ganzzahlige Teil der Mantisse ( implizite Einheit ) nicht im Speicher gespeichert . Es ist auch erwähnenswert, dass die Genauigkeit von Bruchverdopplungen etwa 16 Dezimalstellen beträgt . 4.5 Beispiele für die Darstellung einer reellen Zahl des Dezimalsystems im Computerspeicher. Und der letzte Punkt unserer Vorlesung wird ein Beispiel für die Umwandlung einer Bruchzahl des Dezimalzahlensystems in die Form ihrer Speicherung im Computerspeicher sein, um das Verständnis des Themas zu festigen. Beispiel 1. Nehmen Sie eine Zahl-4,25 Schwimmertyp. Stellen wir es in exponentiell normalisierter Form im binären Zahlensystem dar und erinnern uns dabei an alles, was wir in dieser Vorlesung behandelt haben. 1) Wandeln Sie den ganzzahligen Teil der Zahl in Binärform um: 4/2 = 2 (Rest der Division 0 ) 2/2 = 1 (Rest der Division 0 ) Der ganzzahlige Teil ist im Binärsystem gleich 100 . 2) Wandeln Sie den Bruchteil der Zahl in Binärform um. 0,25*2 = 0,5 ( 0 ) 0,5*2 = 1,0 ( 1 ) Der Bruchteil ist im Binärsystem gleich 0,01 . 3) Somit ist -4,25₁₀ = -100,01₂ . 4) Lassen Sie uns die Zahl -100,01₂ in eine exponentiell normalisierte Form im Binärzahlensystem umwandeln (was bedeutet, dass die Basis der Potenz 2 sein wird). -100,01₂ = -1,0001 *2² Lassen Sie uns den Gradwert vom Dezimalformat in das Binärformat konvertieren . 2/2= 1 (Rest 0 ) Der Grad beträgt 10₂. Wir erhalten, dass die Zahl -4,25₁₀ in ihrer binär exponentiell normalisierten Form gleich -1,0001 * 2¹º ist . Schreiben wir auf, wie sie im Computerspeicher aussehen wird. Das Vorzeichenbit ist 1 (negative Zahl). Der Exponentenoffset ist gleich 2+127 = 129₁₀ = 10000001₂ . Wir entfernen die implizite Eins aus der Mantisse , wir erhalten 00010000000000000000000 ( wir füllen die nicht belegten niederwertigen Bits mit Nullen ). Endeffekt. 1 10000001 00010000000000000000000 – so wird die Zahl -4,25 im Speicher des Computers gespeichert. Beispiel 2. Konvertieren Sie die Float- Zahl 0,75₁₀ in ein binäres Speicherformat im Computerspeicher. Das Ergebnis sollte 0 01111110 10000000000000000000000 sein . Danke für die Aufmerksamkeit.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION