WEBVTT

00:00.970 --> 00:01.680
Schönen guten Tag.

00:01.840 --> 00:06.520
Ich begrüße Sie zur Fortsetzung der Vorlesung Grundlageninformatik II.

00:07.360 --> 00:09.020
Ich wünsche Ihnen zunächst mal ein gutes neues Jahr.

00:09.140 --> 00:10.940
Ich hoffe, Sie sind gut reingekommen, hatten ein paar schöne

00:10.940 --> 00:11.660
Feiertage.

00:13.120 --> 00:19.700
Und jetzt geht es frisch und munter weiter mit Grundlageninformatik

00:19.700 --> 00:20.080
II.

00:20.980 --> 00:26.380
Es haben sich übrigens für die Bonusklausur rund 600 Studenten

00:26.380 --> 00:27.080
angemeldet.

00:27.080 --> 00:31.800
Das ist eine große Zahl, aber es ist nicht genau die Zahl der

00:31.800 --> 00:33.800
Studenten, die wir erwartet hatten.

00:34.420 --> 00:37.380
Es hätten sogar noch ein bisschen mehr sein können, aber das ist schon

00:37.380 --> 00:37.820
in Ordnung.

00:38.480 --> 00:42.220
Ansonsten ist es so, dass jetzt auch die Anmeldung läuft für die

00:42.220 --> 00:44.940
Abschlussklausur.

00:44.960 --> 00:47.900
Für die richtige Klausur.

00:48.280 --> 00:50.740
Am Montag nach Ende der Vorlesungszeit.

00:51.460 --> 00:54.440
Das hat jetzt vor ein paar Tagen begonnen mit der Anmeldung.

00:54.440 --> 00:56.040
Und auch das wollten Sie demnächst machen.

00:56.180 --> 00:58.000
Da werde ich Sie beim nächsten Mal darauf hinweisen.

00:58.800 --> 01:01.260
Dann vielleicht nochmal eine Bemerkung zu den weiteren

01:01.260 --> 01:02.360
Vorlesungsterminen.

01:03.240 --> 01:06.880
Sie wissen ja, dass es eigentlich eine dreistündige Vorlesung ist.

01:07.060 --> 01:09.260
Ich habe jetzt fast durchgehend vierstündig gelesen.

01:09.560 --> 01:12.400
Es gab mal zwei Wochen, wo ich das nicht gemacht habe.

01:14.280 --> 01:19.100
Und das Kontingent der vierstündigen Wochen ist eigentlich um.

01:19.100 --> 01:22.380
Ich nehme aber die Freiheit, das diese Woche nochmal zu machen.

01:22.540 --> 01:25.700
Ich werde also am Mittwoch früh nochmal auch Mittwochs die Vorlesung

01:25.700 --> 01:26.040
machen.

01:26.460 --> 01:28.780
In den nächsten Wochen dann nur noch montags.

01:29.580 --> 01:32.160
Das heißt, wir haben noch insgesamt sechs Termine.

01:32.400 --> 01:35.040
Das ist sehr knapp für den Stoff, der hier vorgegeben ist.

01:35.520 --> 01:38.640
Ich werde also ein bisschen was noch hier streichen müssen.

01:39.360 --> 01:42.340
Aber das werden wir sehen, was dann konkret rausfällt.

01:43.140 --> 01:49.020
Gut, ich wollte vielleicht diese Werkzeuge mal genießen, damit wir

01:49.020 --> 01:50.140
nicht geschlüpft sind.

02:03.330 --> 02:07.270
Also, wir gehen zur Vorlesung.

02:07.350 --> 02:08.710
Was haben wir in der Vorlesung gemacht?

02:09.310 --> 02:12.210
Vor Weihnachten im alten Jahr.

02:12.890 --> 02:15.870
Dort ging es um Codierung und Zahlendachstellung.

02:15.870 --> 02:24.450
Wir haben uns die verschiedenen Möglichkeiten angeschaut,

02:24.450 --> 02:25.790
Informationen zu codieren.

02:25.910 --> 02:29.230
Wir hatten viele verschiedene Sachen angeschaut, generell zu

02:29.230 --> 02:29.910
Codierungen.

02:30.090 --> 02:33.610
Ich habe Ihnen etwas erzählt über Codierungen allgemein, Mause

02:33.610 --> 02:36.990
-Codierungen, über die Frage der Umkehrbarkeit.

02:37.090 --> 02:42.930
Ich habe Ihnen etwas erzählt über Fehlererkennung und Korrektur.

02:42.930 --> 02:48.710
Da gab es dieses schöne Bild, dass wir alle fehlerhaften Codewörter

02:48.710 --> 02:54.570
erkennen können, die zwischen irgendwelchen richtigen Codewörtern

02:54.570 --> 02:54.890
liegen.

02:55.590 --> 03:00.230
Und wenn man die minimale Distanz hat zwischen je zwei Codewörtern in

03:00.230 --> 03:04.990
einem Code, dann kann man eben auch sagen, bis zu welchem Fehlergrad

03:04.990 --> 03:08.950
man garantiert einen Fehler erkennen kann, wenn ein Codewort irgendwo

03:08.950 --> 03:11.390
zwischen solchen realen Codeworten liegt.

03:11.390 --> 03:16.010
Und wenn wir uns dann noch die Entfernung anschauen, bis zu der wir

03:16.010 --> 03:20.630
eindeutig zuordnen können, aus welchem richtigen Codewort ein

03:20.630 --> 03:23.010
fehlerhaftes Codewort entstanden ist, dann können wir diese Fehler

03:23.010 --> 03:23.890
auch korrigieren.

03:24.390 --> 03:30.530
Deswegen ist die Korrigierbarkeit gerade halb so groß wie die minimale

03:30.530 --> 03:32.230
Distanz zwischen zwei Codewörtern.

03:32.230 --> 03:36.330
Also die minimale Distanz zwischen zwei Codewörtern.

03:37.090 --> 03:39.710
Und damit haben wir also dann die Korrigierbarkeit und die

03:39.710 --> 03:40.270
Erkennbarkeit.

03:40.430 --> 03:41.370
Das waren diese beiden Begriffe.

03:41.990 --> 03:47.110
Wir haben uns dann beschäftigt mit der Häufigkeitsabhängigen

03:47.110 --> 03:47.590
Kodierung.

03:47.770 --> 03:49.510
Ich habe Ihnen den Huffman Code vorgestellt.

03:50.070 --> 03:53.630
Dieses Bild, wo wir eine Koalition haben über die Häufigkeit von

03:53.630 --> 03:57.970
Zeichen und dann eine Kodierung wählen, die möglichst bitzfrei ist.

03:57.970 --> 04:02.390
Das heißt, ich verwende für die häufigen Zeichen mehr Bitz als für die

04:02.390 --> 04:08.530
weniger häufigen Zeichen und habe dadurch dann eine Reduktion des

04:08.530 --> 04:11.870
Platzes für die Kodierung.

04:12.530 --> 04:17.290
Und die Huffman-Kodierung ist halt ein Ansatz, bei dem man eine

04:17.290 --> 04:20.130
optimale Kodlänge garantieren kann.

04:20.550 --> 04:22.130
Das Verfahren war relativ einfach.

04:22.130 --> 04:27.590
Wir bauen diesen Kodbaum auf und können dann einfach auf den Wegen von

04:27.590 --> 04:34.490
der Wurzel zu den Blättern, die mit 0 und 1 jeweils kodiert sind,

04:34.790 --> 04:36.170
können wir dann halt kurz ableiten.

04:36.290 --> 04:40.430
Wobei man dem eines sagen kann, die Zuordnung, ob ich jetzt nach links

04:40.430 --> 04:46.590
mit 0 oder nach rechts mit 1 das bezeichne, ist völlig egal.

04:46.770 --> 04:50.330
Sie können irgendeine Zuordnung machen, jeweils mit 0 und 1 auf diese

04:50.330 --> 04:50.990
Kanten.

04:50.990 --> 04:56.050
Es muss eben nur dann entsprechend abgelesen werden von der Wurzel zu

04:56.050 --> 05:01.170
den Blättern, damit man eben diesen Kod bekommt, der am Ende die

05:01.170 --> 05:02.210
Fahnenbedingungen erfüllt.

05:02.330 --> 05:05.550
Das heißt, es darf kein Kodwort, Anfangswort eines anderen Kodwortes

05:05.550 --> 05:05.830
sein.

05:06.430 --> 05:10.230
Und wenn man das gewährleisten kann, dann wissen wir, ist der Kod auch

05:10.230 --> 05:11.010
umkehrbar.

05:11.590 --> 05:12.150
Eindeutig.

05:12.890 --> 05:15.630
Das ist halt wichtig für die Kodierung von irgendwelchen längeren

05:15.630 --> 05:16.390
Texten.

05:16.390 --> 05:18.310
Das waren die Tasmenkodierungen.

05:18.410 --> 05:22.010
Ich habe Ihnen dann erzählt über die Darstellung von Zeichensätzen.

05:22.230 --> 05:25.350
Wir hatten uns den ASCII-Kode angeschaut, den EBCD-Kode.

05:25.870 --> 05:30.210
Ich habe Ihnen etwas gezeigt bezüglich Unicode, genau.

05:30.370 --> 05:33.290
Dann haben wir uns mit den Daten von Ziffern beschäftigt, haben uns

05:33.290 --> 05:37.890
das genauer angeschaut und kamen dann zu der Darstellung von Zahlen

05:37.890 --> 05:42.170
und hatten uns dort schon angesehen, die einfachen

05:42.170 --> 05:43.210
Zahlendarstellungen.

05:43.630 --> 05:46.450
Dann haben wir uns überlegt, die Anforderungen, die wir haben, dass

05:46.450 --> 05:50.050
der Aufwand für die Darstellung intern nicht zu hoch sein darf.

05:50.490 --> 05:53.050
Und es muss natürlich möglich sein, dass wir intern auch rechnen

05:53.050 --> 05:55.630
können in dieser kodierten Form.

05:55.770 --> 06:00.250
Das heißt, auch wenn wir auf den kodierten Wörtern Operationen

06:00.250 --> 06:03.310
ausführen, dass es gleiche Ergebnisse gibt, als wenn wir erst

06:03.310 --> 06:06.030
Operationen ausführen und dann kodieren, weil wir ja im Rechner

06:06.030 --> 06:07.130
arbeiten.

06:07.130 --> 06:12.270
Und ich hatte dann die Dualdarstellung Ihnen kurz nochmal erläutert.

06:12.710 --> 06:16.490
Wir hatten uns dann überlegt, wie man prinzipiell ganze Zahlen

06:16.490 --> 06:17.290
darstellen kann.

06:17.370 --> 06:21.650
Da ist das Problem, dass wir negative und positive Zahlen haben, die

06:21.650 --> 06:24.150
entsprechend geeignet kodiert sein müssen.

06:24.770 --> 06:27.910
Und dafür gibt es halt verschiedene Möglichkeiten, Vorzeichenbetrag,

06:27.990 --> 06:29.650
XSQ, Komplementdarstellungen.

06:30.130 --> 06:33.450
Und diese Komplementdarstellung, die wird jetzt genauer betrachtet.

06:33.450 --> 06:42.250
Vielleicht fange ich mit der Folie hier an, die hier nochmal kurz

06:42.250 --> 06:44.570
diese Möglichkeiten zeigt.

06:45.550 --> 06:48.470
Also das, was wir jetzt als nächstes betrachten, ist die

06:48.470 --> 06:55.890
Komplementdarstellung, bei der man eben eine Zahl X negiert, dadurch,

06:56.110 --> 07:00.290
dass man das Komplement zu einer großen anderen Zahl betrachtet, zu

07:00.290 --> 07:03.190
dieser Zahl groß K, für Komplement.

07:04.110 --> 07:07.530
Und dadurch habe ich dann halt die positiven Zahlen in dem unteren

07:07.530 --> 07:12.730
Bereich hier von 0 bis K halbe und die negativen Zahlen entsprechend

07:12.730 --> 07:15.170
von K halbe plus 1 bis K.

07:15.330 --> 07:19.910
Das sind dann meine Möglichkeiten, auf die Art und Weise positive und

07:19.910 --> 07:21.370
negative Zahlen darzustellen.

07:21.370 --> 07:28.410
Und diese Möglichkeit ist eine der Standardmöglichkeiten, die wir in

07:28.410 --> 07:29.850
den Rechnern tatsächlich verwenden.

07:30.270 --> 07:32.930
Zwei Komplement, ein Komplementdarstellung sind Standard

07:32.930 --> 07:33.990
-Zahlendarstellungen.

07:34.170 --> 07:36.750
Und ich muss Ihnen kurz erzählen, was es damit auf sich hat.

07:38.010 --> 07:42.510
Zwei Komplementdarstellung heißt nicht, dass das große K jetzt gleich

07:42.510 --> 07:46.350
zwei ist und bei einem Komplement gleich eins, sondern es geht darum,

07:46.350 --> 07:51.030
dass bei der Zweierkomplementdarstellung das große K gleich zwei hoch

07:51.030 --> 07:51.690
N ist.

07:52.050 --> 07:59.610
Für N-Bit-Zahlen also eine Darstellung komplementär zu der Zahl K

07:59.610 --> 08:00.690
gleich zwei hoch N.

08:01.090 --> 08:10.530
N-Bit-Zahlen und jetzt nochmal angegeben, wir haben also hier unsere

08:10.530 --> 08:13.470
Zahlenbereich, den wir darstellen wollen.

08:14.550 --> 08:16.770
Zweierkomplementdarstellung mit N-Bit-Zahlen.

08:17.310 --> 08:20.650
Das heißt, wir haben insgesamt zwei hoch N mögliche Werte.

08:21.550 --> 08:24.410
Und das, was wir konkret darstellen in diesem Fall, sind die Zahlen

08:24.410 --> 08:29.350
von minus 2 hoch N minus 1 bis 0 und von 1 bis 2 hoch N minus 1 minus

08:29.350 --> 08:30.250
1.

08:30.390 --> 08:33.690
Das sind genau diese zwei hoch N verschiedenen Zahlen, die man

08:33.690 --> 08:37.650
darstellen kann, halt gleichmäßig aufgeteilt auf positive und negative

08:37.650 --> 08:38.090
Zahlen.

08:39.190 --> 08:45.190
Und die Darstellung geht halt so, dass wir die positiven Zahlen von 0

08:45.190 --> 08:50.430
bis 2 hoch N minus 1 minus 1, das ist gerade dieser linke Teil hier,

08:50.910 --> 08:54.270
dieser Bereich, die werden dann einfach direkt als Dualzahlen

08:54.270 --> 08:54.830
dargestellt.

08:55.730 --> 08:59.970
Die negativen Zahlen, wenn ich also einen Wert habe, der zwischen

08:59.970 --> 09:05.450
minus 2 hoch N minus 1 und minus 1 liegt, dann wird dieser Wert

09:05.450 --> 09:08.530
dargestellt als Komplement zu 2 hoch N.

09:09.030 --> 09:12.410
Das heißt, ich habe hier hingeschrieben 2 hoch N plus X.

09:13.390 --> 09:17.450
Da das X ein negativer Wert ist, heißt das, ich habe genau hier, also

09:17.450 --> 09:20.290
hier, da müsste ich genauer hinschreiben, damit das zueinander passt,

09:20.830 --> 09:25.530
K minus Betrag von X für diese negativen Zahlen.

09:28.730 --> 09:30.530
Also hier steht ja 2 hoch N plus X.

09:30.590 --> 09:34.330
Ich hätte auch hinschreiben können 2 hoch N minus Betrag von X, falls

09:34.330 --> 09:35.590
das X eine negative Zahl ist.

09:36.450 --> 09:38.570
So, und dann müssen wir uns angucken, welche Eigenschaften diese

09:38.570 --> 09:39.230
Codierung hat.

09:39.390 --> 09:43.490
Also die positiven Zahlen sind halt einfach die üblichen

09:43.490 --> 09:46.630
Dualzahldarstellungen der Zahlen.

09:47.050 --> 09:50.650
Bei den negativen habe ich halt diese Darstellung, das ist nochmal 2

09:50.650 --> 09:51.430
hoch N minus X.

09:51.430 --> 09:54.850
Und das Bit N minus 1 ist natürlich gleich 1.

09:55.370 --> 10:01.250
Das Bit N minus 1, also wenn ich mir die Zahl angucke, habe ich das

10:01.250 --> 10:05.050
Bit 0 hier, und das Bit N minus 1 ist dauernd das oberste Bit.

10:05.430 --> 10:09.410
Dieses oberste Bit ist natürlich 1, weil wir hier in der

10:09.410 --> 10:13.210
Dualdarstellung Zahlen betrachten, die in diesem Bereich liegen.

10:13.830 --> 10:20.110
Und das sind halt Zahlen von 2 hoch N minus 1 plus 0, 1, 2, 3 und so

10:20.110 --> 10:20.250
weiter.

10:21.870 --> 10:25.810
Und deswegen ist das erste Bit immer 1.

10:26.870 --> 10:29.870
So, und schauen wir uns das nochmal an.

10:30.010 --> 10:34.810
Also es ist so, dass wir für diese Binärdarstellung, BN minus 1 bis

10:34.810 --> 10:43.070
B0, wenn das die Darstellung ist, dann, die wir eben dann auch häufig

10:43.070 --> 10:47.070
so kennzeichnen, dass hier 2K,N dran steht, damit wir wissen, wie wir

10:47.070 --> 10:48.010
das interpretieren müssen.

10:48.870 --> 10:53.970
Dann ist der Wert der Zahl X, die hier dargestellt wird, in dieser

10:53.970 --> 10:58.690
Zweierkomplementdarstellung, dadurch zu halten, dass wir das Bit BN

10:58.690 --> 11:05.810
minus 1 mal 2 hoch N minus 1, also damit modifizieren, minus B hoch N

11:05.810 --> 11:07.690
minus 1 mal 2 hoch N minus 1.

11:07.870 --> 11:09.770
Warum minus B hoch N minus 1?

11:09.810 --> 11:14.250
Wenn das BN minus 1 0 ist, dann sind wir hier in dem Bereich der

11:14.250 --> 11:18.550
positiven Zahlen, dann steht dort nur im Prinzip die Summe dieser Bi,

11:19.110 --> 11:20.470
die gleich 0 bis N minus 2.

11:21.970 --> 11:27.770
Und wenn das oberste Bit BN minus 1 1 ist, dann sind wir halt bei der

11:27.770 --> 11:30.530
Dualdarstellung in diesem Bereich, aber bei der tatsächlich

11:30.530 --> 11:34.230
dargestellten Zahl, das ist eine negative Zahl, müssen wir halt das 2

11:34.230 --> 11:35.870
hoch N minus 1 abziehen.

11:36.030 --> 11:39.670
Das heißt, wir müssen ja vom Wert hier in einen Bereich kommen, der

11:39.670 --> 11:42.150
hier links von der 0 liegt.

11:42.150 --> 11:45.750
Da müssen wir hin, das ist minus 2 hoch N minus 1.

11:47.630 --> 11:53.970
Ja, deswegen, die Werte, der konkret dargestellte Wert, wenn wir uns

11:53.970 --> 11:57.330
BN minus 1 bis B0 anschauen, das aus Dualstand interpretieren, sind

11:57.330 --> 12:01.670
wir irgendwo in dem Bereich, aber die Zahl, die dargestellt wird,

12:01.770 --> 12:03.410
liegt ja in diesem Bereich.

12:03.410 --> 12:10.950
Und da müssen wir halt genau von diesem Wert hier die Frequenz N minus

12:10.950 --> 12:11.370
1 halten.

12:12.210 --> 12:17.110
Okay, das ist eine ganz einfache Konsequenz dieser Definition, die wir

12:17.110 --> 12:18.430
hier oben gemacht haben.

12:18.990 --> 12:21.770
Wenn man sich das jetzt anschaut für N gleich 4, sehr einfache Zahlen.

12:22.410 --> 12:25.170
N gleich 4 heißt, 16 verschiedene Zahlen sind möglich.

12:27.270 --> 12:32.010
Die 0 wird in diesem Fall natürlich dargestellt einfach nur durch die

12:32.010 --> 12:32.850
4 Nullen.

12:33.970 --> 12:37.610
Also 0 bis 7 ist ganz klar, das sind einfach die Kodierungen von 0 bis

12:37.610 --> 12:40.070
7, Dualkodierungen, das kennen Sie alle.

12:41.210 --> 12:42.310
Aber eben mit 4 Bit.

12:42.930 --> 12:44.690
Und jetzt kommen die negativen Zahlen.

12:44.690 --> 12:52.010
Und dann ist eben die Zweikomplementarstellung von minus 1, ist die

12:52.010 --> 12:57.050
Darstellung von 2 hoch N minus 1.

12:57.450 --> 13:01.270
Das ist genau dieser Wert, wo 4 einzeln stehen.

13:02.530 --> 13:06.670
Und minus, das ist natürlich dann der Wert hier genau an der Stelle,

13:06.770 --> 13:07.590
das ist die minus 1.

13:07.590 --> 13:13.010
Und entsprechend die minus 2 bis minus 8 sind dann diese anderen

13:13.010 --> 13:16.430
Werte, wo wir halt jeweils als erstes mit einer 1 haben.

13:16.650 --> 13:20.610
Und ansonsten dann natürlich auch wieder die Zahlen von 0 bis 7, aber

13:20.610 --> 13:23.870
eben Dual 0 bis 7 oder entsprechend.

13:25.550 --> 13:28.930
So haben wir dann hier die Zahlen dargestellt, minus 1 bis minus 8.

13:30.150 --> 13:33.390
Das ist einfach die Darstellung dieser Zahlen.

13:33.390 --> 13:35.630
Und jetzt schaut man sich das noch ein bisschen genauer an und schaut

13:35.630 --> 13:38.950
sich die genaue Beziehung an zwischen diesen beiden Werten, zwischen x

13:38.950 --> 13:40.430
und dem Zweikomplement von x.

13:42.690 --> 13:46.130
Und was man sich hier überlegen kann, ist folgendes.

13:46.190 --> 13:50.790
Die Definition ist ja, dass wenn wir das Zweikomplement von x

13:50.790 --> 13:54.470
betrachten, wir 2 hoch N minus x ausrechnen müssen.

13:54.470 --> 13:58.130
Jetzt kann ich einen kleinen Trick anwenden und schreibe hier hin,

13:58.810 --> 14:02.770
dieses 2 hoch N minus x ist ja das gleiche, als wenn ich 2 hoch N

14:02.770 --> 14:07.870
minus 1 betrachte, davon x abziehe und dann 1 drauf addiere.

14:08.630 --> 14:09.570
Warum mache ich das?

14:10.270 --> 14:12.550
Das hat ganz einfach folgenden Grund, den Sie hier unten drunter

14:12.550 --> 14:12.970
sehen.

14:12.970 --> 14:17.450
Wenn ich das, was hier steht, dieses 2 hoch N minus 1 minus x plus 1,

14:17.990 --> 14:23.650
wenn ich das also kodiert hinschreibe, dann steht hier Dualdarstellung

14:23.650 --> 14:30.150
von 2 hoch N minus 1 minus Dualdarstellung von x plus Dualdarstellung

14:30.150 --> 14:30.890
von 1.

14:33.270 --> 14:37.130
Dualdarstellung von 2 hoch N minus 1, das sind nur Einsen.

14:38.530 --> 14:39.610
Das sind auch N Einsen.

14:41.250 --> 14:47.430
Dualdarstellung von x, das sind gerade meine B N minus 1 plus B Null.

14:48.110 --> 14:50.170
Das sind also meine Zahl x.

14:50.830 --> 14:52.250
Und da muss man hier 1 drauf addieren.

14:53.750 --> 14:57.470
So, das heißt, ich habe hier Einsen, ich habe hier irgendwelche Bits,

14:57.910 --> 14:59.430
da kommt noch dieser Wert dazu.

15:00.070 --> 15:05.670
Wenn ich mir jede einzelne Position anschaue, dann heißt das doch, ich

15:05.670 --> 15:09.550
muss jeweils von einer Eins, ich habe hier oben überall die Einsen

15:09.550 --> 15:18.210
stehen, und darunter steht jetzt mein B, in dem Fall B4, B3, B4 bis B

15:18.210 --> 15:18.490
Null.

15:18.990 --> 15:21.850
Ich muss jeweils 1 minus Bi rechnen.

15:23.310 --> 15:29.690
1 minus Bi heißt, ich muss einfach den Wert, der dort steht, negieren,

15:29.830 --> 15:31.050
also das Bit praktisch nur kippen.

15:31.430 --> 15:34.530
Ich kippe alle Bits und muss am Ende nochmal eine Eins addieren.

15:35.590 --> 15:36.590
Das ist ja ganz einfach.

15:39.870 --> 15:46.050
Also, wenn ich mir irgendeine Zahl betrachte, dann kommen die 0, 1, 0,

15:46.330 --> 15:47.210
1, 0.

15:47.810 --> 15:50.010
Zweierkomplement davon ist also ganz einfach.

15:51.790 --> 15:54.190
Das wäre das Zweierkomplement davon.

15:54.370 --> 15:57.930
Ist dann also einfach, dass ich überall die Bits kippe.

15:58.130 --> 16:01.450
0, 0, 1, 0, 1.

16:01.450 --> 16:04.810
Und dann noch eine Eins addiere.

16:05.490 --> 16:09.870
Und dann kommt hier raus 0, 1, 1, 0, 0, 1.

16:10.470 --> 16:13.270
Das wäre das Zweierkomplement zu dieser Zahl.

16:13.330 --> 16:21.570
Wenn das hier x ist, dann wäre das hier unten das Zweierkomplement von

16:21.570 --> 16:21.890
x.

16:24.690 --> 16:27.110
Das ist also eine ganz einfache Rechenregel.

16:27.730 --> 16:31.150
Und diese sehr einfache Rechenregel haben wir uns dadurch abgeleitet,

16:31.270 --> 16:36.350
dass wir uns diese Definition Zweierkomplement ist 2 auf m-x ein

16:36.350 --> 16:39.130
bisschen anders aufgeschrieben haben und festgestellt haben, dass es

16:39.130 --> 16:42.590
geht auf diese einfache Art und Weise, Bits kippen und Eins agieren.

16:43.790 --> 16:45.390
Und die Eins geht halt immer auf die letzte.

16:45.670 --> 16:48.810
Das heißt, wir haben ganz recht einmal eine Eins drauf zu agieren.

16:48.930 --> 16:51.170
Je nachdem, welche Bits da stehen, läuft das eventuell noch weiter

16:51.170 --> 16:51.550
nach links.

16:54.650 --> 16:55.090
Gut.

16:55.090 --> 16:57.110
Dann kann man sich noch ein paar Sachen überlegen.

16:57.590 --> 17:03.710
Wenn ich zweimal das Komplement bilde, zweimal negieren, sollte

17:03.710 --> 17:05.650
eigentlich die Identität bilden.

17:05.650 --> 17:06.910
Habe ich hier natürlich auch.

17:09.670 --> 17:16.190
Wenn z das Zweierkomplement von y ist und y das Zweierkomplement von

17:16.190 --> 17:23.010
x, dann wäre also das z gleich 2 auf m-y, das y ist 2 auf m-x.

17:23.670 --> 17:25.770
Und wenn Sie das hinschreiben, kommt dann natürlich wieder x rein.

17:26.630 --> 17:29.450
Das ist klar, das ist natürlich sinnvoll so definiert.

17:29.990 --> 17:32.350
Wir haben also doppelt negiert hier wieder den alten Wert.

17:32.930 --> 17:36.450
Jetzt kann man sich diesen Zahlenbereich, den man jetzt darstellen

17:36.450 --> 17:40.270
kann, positive und negative Zahlen, auch so aufschreiben wie hier in

17:40.270 --> 17:41.230
diesem Zahlenring.

17:41.350 --> 17:45.610
Wir haben also unsere Zahlen, die jetzt hier, was den dualen Wert

17:45.610 --> 17:48.930
angeht, eigentlich in dieser Richtung aufsteigend angeordnet sind.

17:49.350 --> 17:50.770
0, 1, 2, 3 bis 7.

17:51.610 --> 17:54.790
Und dann geht es mit minus 8, minus 7, minus 6 usw.

17:55.010 --> 17:55.130
weiter.

17:55.270 --> 17:58.530
Das heißt, hier geht es im Prinzip vom Wert her auch aufsteigend, aber

17:58.530 --> 18:01.770
eben entsprechend verschoben, dass wir jetzt negative Zahlen, indem

18:01.770 --> 18:03.750
wir die auch aufsteigend angeguckt haben.

18:04.690 --> 18:11.810
Eigentlich haben wir hier von minus 8 bis 7 die Zahlen angeordnet,

18:12.050 --> 18:17.330
aber der numerische Wert, der ist halt, hier haben wir halt, gehen wir

18:17.330 --> 18:21.430
halt von 2 auf m-1, bringen wir dann auf die 0, wenn wir von der minus

18:21.430 --> 18:22.410
1 auf die 0 gehen.

18:23.290 --> 18:26.610
Gut, das ist also dieses zweite Komplement.

18:27.330 --> 18:31.050
Die Definition ist, dass wir den Wert abziehen von 2 auf m.

18:31.610 --> 18:35.630
Der konkrete Weg, wie wir ein 2-Komplement bilden, ist, dass wir alle

18:35.630 --> 18:37.730
Bits kippen und dann eine 1 addieren.

18:38.270 --> 18:42.010
Das haben wir festgestellt, dass das sinnvoll ist, aufgrund dieser

18:42.010 --> 18:45.870
Darstellung, diesem Vorgang von 2 auf m, x abziehen.

18:46.710 --> 18:47.190
Okay.

18:48.030 --> 18:52.330
Und dann ist hier nochmal dieser Code angegeben, hier an diesem Kreis

18:52.330 --> 18:52.930
dargestellt.

18:53.450 --> 18:55.950
Das ist das, was sich schon auf der vorigen Folie hat.

18:55.950 --> 18:59.730
Wenn wir uns jetzt anschauen, was das heißt bezüglich der Arithmetik,

18:59.770 --> 19:02.390
wir hatten ja gesagt, dass wir Zahlen darstellen, müssen wir das so

19:02.390 --> 19:05.050
machen, dass wir auf einfache Art und Weise die arithmetischen

19:05.050 --> 19:06.670
Operationen ausführen können.

19:07.190 --> 19:09.670
Wenn wir jetzt eine Zahl addieren, was passiert denn dann?

19:10.450 --> 19:16.330
Also ich addiere irgendetwas auf einen Wert hier drauf, dann wandere

19:16.330 --> 19:18.750
ich doch einfach in meinem Ring etwas weiter.

19:20.270 --> 19:24.030
Also 2 plus 5 gibt natürlich 7.

19:25.530 --> 19:26.110
Ja.

19:27.270 --> 19:29.670
2 plus 6 gibt 8.

19:31.230 --> 19:35.610
Das würde uns den Wert liefern, wenn wir die dual addieren, das wäre

19:35.610 --> 19:36.270
bei minus 8.

19:36.370 --> 19:36.870
Das wäre schlecht.

19:37.710 --> 19:41.270
Das heißt, da müssen wir aufpassen, wenn wir hier Zahlen addieren,

19:42.030 --> 19:46.890
dass wir dabei natürlich eventuell unseren Zahlenbereich verlassen

19:46.890 --> 19:47.270
können.

19:48.150 --> 19:51.210
Also klar, wenn wir eine positive Zahl addieren, dann wandern wir

19:51.210 --> 19:54.680
immer entsprechend gegen den Uhrzeigersinn, durch unseren Kreis durch.

19:55.040 --> 19:57.820
Wenn wir eine negative Zahl addieren, dann müssen wir die Zahl

19:57.820 --> 19:58.400
abziehen.

19:58.780 --> 20:03.560
Gehen wir in den Uhrzeigersinn, negative Zahlen addieren, Kreisleben

20:03.560 --> 20:05.140
beginnen in der anderen Richtung.

20:05.600 --> 20:06.220
Im Uhrzeigersinn.

20:07.380 --> 20:11.460
Wenn wir jetzt in zweier Komplementarstellung addieren, dann kann es

20:11.460 --> 20:15.960
sein, dass wir den Zahlenbereich verlassen, beziehungsweise dass wir

20:15.960 --> 20:21.420
hier, wir müssen aufpassen, eine 8 ist hier nicht darstellbar, das ist

20:21.420 --> 20:23.540
außerhalb des Bereichs, das müssen wir erkennen können.

20:23.860 --> 20:24.700
Wie können wir das erkennen?

20:26.200 --> 20:31.460
Also, schauen wir uns mal an, welche Fälle es hier zum Beispiel geben

20:31.460 --> 20:31.800
kann.

20:32.320 --> 20:34.900
Minus 2 plus 3, was ergibt das denn?

20:34.940 --> 20:35.700
Was kommt denn hier raus?

20:36.900 --> 20:41.080
Minus 2 ist diese Zahl, die da oben steht, die 3 ist da unten

20:41.080 --> 20:41.580
angegeben.

20:41.680 --> 20:48.780
Wenn wir die beiden addieren, kommt daraus 1, 0, 0, 0, 1.

20:50.660 --> 20:51.740
Im Überlauf.

20:52.960 --> 20:54.700
Was müsste denn rauskommen?

20:55.680 --> 20:57.640
Es müsste rauskommen minus 1.

21:00.650 --> 21:03.070
Ich meine 1 natürlich, minus 2 plus 3 ergibt 1.

21:03.470 --> 21:06.910
Also die 1 steht hier, 0, 0, 0, 1.

21:08.230 --> 21:12.610
Das ist genau der Wert, der hier steht, 0, 0, 0, 1.

21:13.410 --> 21:18.190
Aber hier ist noch eine 1 dort vorne entstanden.

21:19.690 --> 21:22.990
Und wenn wir uns das hier anschauen, minus 2, minus 3, was passiert

21:22.990 --> 21:23.670
dann?

21:23.870 --> 21:31.210
Wenn ich die beiden addiere, dann kommt raus 1, 1, 0, 0,

21:34.320 --> 21:35.040
1.

21:37.760 --> 21:38.060
So.

21:38.960 --> 21:41.560
Minus 2, minus 3 müsste ja eigentlich...

21:44.400 --> 21:44.960
Ähm...

21:44.960 --> 21:45.760
Das stimmt auch nicht.

21:46.640 --> 21:47.540
Hier kommt eine 1 hin.

21:47.540 --> 21:48.140
Ja.

21:49.140 --> 21:51.080
Da hätten wir nicht so gut produzieren müssen.

21:51.600 --> 21:54.460
1, 1, die beiden werden addiert, gibt eine 0.

21:54.660 --> 21:57.120
Übertrag 1, 3, 1, addiert, gibt eine 1.

21:58.240 --> 21:59.860
Und noch ein Übertrag 1.

22:00.200 --> 22:05.960
Und dieses 1, 0, 1, 1, das ist natürlich gerade die Minus 5.

22:06.060 --> 22:06.560
Das ist so richtig.

22:07.020 --> 22:08.700
Wir haben hier einen Überlauf.

22:09.500 --> 22:11.560
Also diesen Überlauf können wir getrost ignorieren.

22:13.920 --> 22:19.740
Wir reduzieren im Prinzip Modulus 2 hoch N, um die richtige 2

22:19.740 --> 22:21.380
-Komplementzahl zu erhalten.

22:21.760 --> 22:28.340
Das heißt, wenn wir minus 2 und minus 3 addieren, oder minus 2 und 3,

22:28.900 --> 22:31.260
kriegen wir zwar einen Überlauf, aber der interessiert uns gar nicht.

22:31.760 --> 22:35.300
Das kommt das Richtige dabei raus, wenn wir nur die vier signifikanten

22:35.300 --> 22:36.560
Bits betreiben.

22:37.360 --> 22:38.780
Das ist der eine Fall.

22:39.560 --> 22:46.200
Und dann gibt es aber auch noch ein Problem, das wir kriegen, wenn wir

22:46.200 --> 22:47.260
den Bereich überschreiten.

22:47.360 --> 22:49.260
Das hatte ich vorhin angesprochen.

22:49.720 --> 22:52.240
Wenn wir eben aus dem Zahlenbereich rausgehen.

22:52.720 --> 22:55.140
Wenn wir zum Beispiel 7 und 3 addieren.

22:56.040 --> 22:57.640
Also, da komme ich gleich drauf.

22:58.180 --> 23:00.080
Noch kurz zu den anderen Bemerkungen, die hier stehen.

23:00.200 --> 23:04.580
Bei der Subtraktion ist es ganz genauso wie bei der Addition.

23:04.820 --> 23:06.820
Ich addiere ja einfach das Komplement.

23:07.620 --> 23:12.600
Wenn ich eine Zahl subkarieren will, kann ich einfach die negative

23:12.600 --> 23:13.500
Zahl addieren.

23:14.100 --> 23:16.300
Ich brauche also nur die Addition zu betrachten.

23:16.780 --> 23:20.800
Wenn ich multipliziere, dividiere, dann kann ich mir im Prinzip die

23:20.800 --> 23:22.600
Operation für die Addition anschauen.

23:22.980 --> 23:25.620
Das ist ein bisschen komplizierter, was man da alles machen muss.

23:26.160 --> 23:28.980
Darauf gehe ich im Einzelnen nicht ein, aber im Prinzip kann man das

23:28.980 --> 23:34.420
über diese Betrachtung der Addition sich überlegen, wie man bei den

23:34.420 --> 23:38.000
Zweierkomplementzahlen multiplizieren und dividieren muss, damit man

23:38.000 --> 23:39.100
das richtige Ergebnis braucht.

23:39.680 --> 23:41.780
Schauen wir uns jetzt nochmal an diesen Fall der

23:41.780 --> 23:46.340
Bereichsüberschreitung, dass wir tatsächlich Zahlen rausbekommen, die

23:46.340 --> 23:48.340
außerhalb des darstellbaren Bereichs liegen.

23:48.440 --> 23:50.580
Wenn wir 7 und 3 addieren, was passiert denn dann?

23:51.280 --> 23:56.420
Dann kommt doch hier raus, einmal 0, über Trag 1 gibt es dann hier

23:56.420 --> 24:03.480
eine 1, über Trag 1 gibt es dort eine 0, über Trag 1 gibt es hier eine

24:03.480 --> 24:06.220
1 und hier vorne steht eine 0.

24:07.140 --> 24:08.380
Schauen wir uns das mal an.

24:08.740 --> 24:10.580
Was passiert dann?

24:11.280 --> 24:17.320
Die beiden werden addiert, kommt hier eine 0, die beiden werden

24:17.320 --> 24:24.000
addiert, kommt hier über Trag 1, hier haben wir 0 plus 1 ist 1, 1 plus

24:24.000 --> 24:26.420
1 ist 0, über Trag 1.

24:28.000 --> 24:29.720
Was machen wir denn damit?

24:29.880 --> 24:32.500
Wenn wir jetzt so vorgehen würden, wie vorher, dass wir einfach den

24:32.500 --> 24:37.220
Überlauf hier ignorieren, würde hier 1, 0, 1, 0 rauskommen.

24:37.360 --> 24:41.640
1, 0, 1, 0 wäre Minus 6 und völlig verkehrt.

24:41.700 --> 24:43.300
Also 7 plus 3 ist nicht Minus 6.

24:43.440 --> 24:44.760
Das heißt, das wäre hier falsch.

24:45.420 --> 24:46.560
Hier müssen wir anders vorgehen.

24:46.680 --> 24:50.700
Wir haben ja festgestellt, wir sind jetzt außerhalb des Bereichs.

24:51.580 --> 24:55.160
Hier müsste ja, hier wird jetzt ja dargestellt die Zahl 10.

24:56.040 --> 24:57.980
Die Zahl 10 haben wir aber nicht in unserem Zahlenbereich.

24:58.580 --> 25:03.980
Und ich erkenne das ganz einfach dadurch, dass ich das Vorzeichen der

25:03.980 --> 25:13.350
Summe von beiden Vorzeichen der Summanden unterscheide.

25:13.630 --> 25:19.490
Also, das Vorzeichen der Summe in diesem Fall, ich ignoriere ja den

25:19.490 --> 25:21.830
Überlauf, ist 1.

25:22.710 --> 25:25.290
Die beiden Operanten hatten aber Vorzeichen 0.

25:26.750 --> 25:33.930
Und hier ist Vorzeichen der Summe 0 und beide Operanten hatten

25:33.930 --> 25:37.910
Vorzeichen 1, also Minus 1.

25:41.050 --> 25:45.850
Das heißt, wenn bei der Addition von negativen Zahlen eine positive

25:45.850 --> 25:49.310
Zahl rauskommt, oder bei der Addition von positiven Zahlen eine

25:49.310 --> 25:52.290
negative Zahl, dann ist das eine Bereichsüberschreitung.

25:52.790 --> 25:54.590
Und wir können das also einfach daran erkennen.

25:55.270 --> 26:00.090
Das heißt, in der Implementierung so eines Additionswerkes muss man

26:00.090 --> 26:03.930
überprüfen, ob diese Fälle auftreten, ob sich das Vorzeichen oder ob

26:03.930 --> 26:10.270
das erste Bit unterschiedlich ist von beiden Operanten, dann kann ich

26:10.270 --> 26:12.590
sagen, ich habe eine Bereichsüberschreitung und kann entsprechend eine

26:13.290 --> 26:16.270
Fehlermeldung und eine Exception bzw.

26:16.270 --> 26:18.410
ein Fehlersignal nach außen schicken.

26:19.270 --> 26:21.710
Das muss ich halt erkennen können, kann man auf diese Art und Weise

26:21.710 --> 26:26.030
einfach erkennen, wenn man einen Bereich überschreitet und auf diese

26:26.030 --> 26:29.750
Art und Weise können wir also die Additionen und auch die Sonderfälle

26:29.750 --> 26:30.650
darin betrachten.

26:31.250 --> 26:32.550
Das ist hier nochmal zusammengefasst.

26:32.710 --> 26:39.090
Euer Komplement ist also in der Lage die Zahlen von 2 hoch n-1 minus 2

26:39.090 --> 26:42.670
hoch n-1 bis 2 hoch n-1 minus 1 darzustellen.

26:43.270 --> 26:46.750
Das ist unsymmetrisch zum Nullpunkt, weil wir eine gerade Anzahl von

26:46.750 --> 26:51.930
Werten haben und wir haben halt die Null und dann gleich viele eben

26:51.930 --> 26:54.590
nicht gleich viele, sondern eine negative Zahl mehr als die positive

26:54.590 --> 26:54.910
Zahl.

26:56.530 --> 26:58.710
Komplementbildung ist einfach, hat man festgestellt.

26:58.870 --> 27:01.950
Die einfache Vorschrift ist, alle Bits kippen und eins zu eins

27:01.950 --> 27:02.450
agieren.

27:03.710 --> 27:08.810
Die Definition ist natürlich den Wert von x abziehen von 2 hoch n.

27:09.390 --> 27:10.910
Dann habe ich das Komplement gebildet.

27:12.570 --> 27:15.350
Die Subtraktion geschieht über die Addition des Komplementes.

27:15.410 --> 27:16.070
Das hatte ich auch gesagt.

27:16.170 --> 27:19.970
Die Negation der Komplementbildung, Überlaufbehandlung war relativ

27:19.970 --> 27:20.490
einfach.

27:21.210 --> 27:23.270
Einfach Modus 2 hoch n reduzieren.

27:23.270 --> 27:26.430
Das heißt, dass sich das Überlaufbild ignorieren und

27:26.430 --> 27:30.250
Bereichsüberschreitungen erkennen dadurch, dass sich das Vorzeigen von

27:30.250 --> 27:32.390
beiden Argumenten unterscheidet.

27:32.530 --> 27:36.450
Damit hat man dann die wesentlichen Eigenschaften dieser 2-Komplement

27:36.450 --> 27:37.110
-Darstellung.

27:37.870 --> 27:40.750
Und jetzt gibt es auch noch eine andere Darstellung, die ein bisschen

27:40.750 --> 27:41.550
anders ist.

27:42.510 --> 27:45.030
Das bisschen ist gerade der Wert 1, der hier steht.

27:45.170 --> 27:51.110
Wir machen jetzt zum Komplement nicht zu 2 hoch n, sondern zu 2 hoch n

27:51.110 --> 27:51.770
minus 1.

27:52.810 --> 27:54.670
Also fast das Gleiche.

27:55.430 --> 27:56.190
Das ist es auch.

27:56.290 --> 27:59.150
Wir haben also hier im Prinzip die gleichen Sachen stehen.

27:59.230 --> 28:02.510
Hier steht es eben nur 2 hoch n minus 1 plus x.

28:03.270 --> 28:05.750
Und entsprechend sind jetzt hier die positiven und negativen Zahlen

28:05.750 --> 28:08.550
etwas anders dargestellt.

28:09.790 --> 28:14.630
Das Interessante ist, wir haben auf einmal zwei Darstellungen der

28:14.630 --> 28:14.990
Null.

28:16.210 --> 28:17.130
Das sehen Sie gleich.

28:19.090 --> 28:23.250
Wir haben eine positive Null und eine negative Null.

28:24.030 --> 28:27.470
Vier Nullen sind die positive Null.

28:27.610 --> 28:29.270
Vier Einzelnen sind die negative Null.

28:30.010 --> 28:30.990
Das macht natürlich keinen Sinn.

28:31.450 --> 28:34.650
Hier ist halt die 2-Darstellung der Null in diesem Fall.

28:35.050 --> 28:38.790
Und wir haben eine symmetrische Anzahl von positiven und negativen

28:38.790 --> 28:39.430
Werten.

28:39.430 --> 28:40.750
Wieder von 1 bis 7.

28:40.910 --> 28:44.250
Und hier ist eben nicht von minus 1 bis minus 8, sondern von minus 1

28:44.250 --> 28:44.930
bis minus 7.

28:46.290 --> 28:53.170
Und genau wie vorher der Wert des höchstrisikanten Bits, das bn-1,

28:54.750 --> 29:00.730
gibt halt an, ob wir 2 auf n-1 subtrahieren müssen oder nicht, um den

29:00.730 --> 29:03.390
realen Wert der dargestellten Zahl zu bekommen.

29:04.030 --> 29:07.950
Das ist völlig analog zu der Folie beim 2er-Komplement.

29:09.150 --> 29:12.510
Und das Wesentliche ist sich jetzt nicht anzugucken, wie sieht das

29:12.510 --> 29:17.150
denn hier aus mit der Rechenregel, um die Komplementbildung

29:17.150 --> 29:18.290
tatsächlich durchzuführen.

29:19.350 --> 29:22.410
Und da sehen Sie hier in diesem Fall, subtrahieren wir ja einfach von

29:22.410 --> 29:25.050
2 auf n-1 das x.

29:25.630 --> 29:31.410
Das heißt, wenn wir hier 2 auf n-1 stehen haben und davon jetzt um die

29:33.310 --> 29:40.730
4 bis 0 subtrahieren, dann müssen wir halt einfach in dem Fall immer

29:40.730 --> 29:42.510
nur 1-Bi rechnen.

29:42.850 --> 29:43.930
Das heißt, nur die Bits müssen kippen.

29:44.330 --> 29:48.390
Das heißt, in diesem Fall ist es einfacher, wir brauchen nur die Bits

29:48.390 --> 29:49.470
zu kippen.

29:49.730 --> 29:54.690
Nicht mehr eine 1 addieren, wie wir das bei dem 2er-Komplement machen.

29:55.030 --> 29:58.910
Das ist noch einfacher, das auf einer Komplement zu bilden.

29:59.070 --> 30:02.610
Einfach nur alle Bits negieren, dann haben wir das 1er-Komplement.

30:04.270 --> 30:07.310
Und auch in diesem Fall ist es natürlich so, dass wir durch doppelte

30:07.310 --> 30:09.830
Anwendung des 1er-Komplements wieder das x erhalten.

30:10.310 --> 30:13.590
Das ist einfach aus der Definition her so klar.

30:13.950 --> 30:16.110
Und auch hier können wir das Ganze als Zahlenring darstellen.

30:16.670 --> 30:21.010
Und da sieht man hier eben nochmal, die 0 ist halt durch zwei Code

30:21.010 --> 30:24.590
-Wörter dargestellt, die anderen Zeichen entsprechend auf diesem

30:25.630 --> 30:27.710
Zahlenring so angeordnet.

30:28.630 --> 30:32.130
Und die Frage, die wir hier angucken müssen, ist wieder wie sieht das

30:32.130 --> 30:34.710
aus, oder was passiert, wenn wir hier rechnen?

30:35.290 --> 30:37.030
Addition, Subtraktion, genau wie vorher.

30:37.350 --> 30:40.530
Wir addieren einfach die negative Zahl, wenn wir subtragieren wollen.

30:41.790 --> 30:46.570
Und das Ganze ist eben wieder entweder ein Weg gegen den Uhrzeigersinn

30:46.570 --> 30:50.970
oder mit dem Uhrzeigersinn, je nachdem, ob wir etwas positiv addieren

30:50.970 --> 30:52.470
oder negativ addieren.

30:53.690 --> 30:55.810
Der Überlauf kann natürlich wieder entstehen.

30:55.890 --> 30:57.370
Die Frage ist, was passiert denn in diesem Fall?

30:57.570 --> 30:59.370
Das sieht ein bisschen anders aus in diesem Fall.

31:00.710 --> 31:03.030
Addieren wir zwei Zahlen, wieder unsere beiden Zahlen, die wir vorher

31:03.030 --> 31:03.510
auch hatten.

31:04.290 --> 31:05.550
Minus 2 plus 3.

31:05.810 --> 31:10.090
Wenn wir die beiden addieren, kommt hier wieder raus, dual addiert, 0

31:10.990 --> 31:18.330
0 Hier kommt 0 raus, da kommt 0 raus, da kommt auch wieder 1 plus 0

31:18.330 --> 31:24.370
ist 0, 1 plus hier ist 1 und hier ist auch 1.

31:24.450 --> 31:34.230
Also 1, 1, 0, 0 1, 1 0, 0, 1, 1 0, 0 Habe ich richtig gerechnet?

31:35.930 --> 31:38.790
0, 0, 0.

31:39.410 --> 31:40.950
Mein Gott, was mache ich jetzt?

31:44.880 --> 31:45.920
0, 1.

31:46.160 --> 31:46.300
So.

31:51.480 --> 31:58.940
1 plus 1 ist 0, Übertrag 1, 1 plus 1 ist 0, Übertrag 1, 1 plus 1 ist

31:58.940 --> 32:03.380
0, Übertrag 1, 1 plus 1 ist 0, Übertrag 1, ich habe hier den Übertrag.

32:05.260 --> 32:13.680
Und bei Minus 2, Minus 3, 1 plus 0 ist 0, 0 plus 0 ist 0, 1 plus 0 ist

32:13.680 --> 32:19.000
0, 1 plus 1 ist 0, Übertrag 1, dann habe ich hier eine 0 und da die

32:19.000 --> 32:19.620
Übertrag 1.

32:25.540 --> 32:31.000
Es ist 1 plus 1 ist 0, Übertrag 1 gibt hier eine 1 und entsprechend

32:31.000 --> 32:32.000
einen Übertrag von 1.

32:32.380 --> 32:34.400
Also 1, 1, 0, 0, 1.

32:35.060 --> 32:35.940
Jetzt schauen wir uns das an.

32:35.940 --> 32:37.320
Hier haben wir einen Wert 0.

32:37.460 --> 32:38.320
Wir suchen nur die Nullen.

32:40.860 --> 32:44.000
Wir können also nicht so vorgehen wie bei der Zweierkompliment.

32:44.220 --> 32:46.440
Da haben wir eine etwas anders verschobene Darstellung.

32:47.220 --> 32:48.900
Rauskommen soll in dem Fall 1.

32:49.000 --> 32:50.220
Also der Wert soll rauskommen.

32:52.360 --> 32:55.840
Und wir haben aber den Wert hätten wir die 4 Nullen.

32:56.800 --> 32:59.600
Und bei dem anderen steht hier 1, 0, 0, 1.

32:59.720 --> 33:03.540
1, 0, 0, 1 ist hier der Wert.

33:03.540 --> 33:05.860
Jetzt soll aber dieser Wert rauskommen.

33:07.380 --> 33:10.960
Und das können wir ganz einfach bekommen, indem wir diese 1, die hier

33:10.960 --> 33:17.040
vorne steht, einfach nehmen und sie dort drauf addieren.

33:17.920 --> 33:22.020
Dann steht hier 1, 0, 0, 0.

33:22.620 --> 33:23.780
Und das gleiche hier machen.

33:23.880 --> 33:30.480
Diese 1, dort wieder drauf addieren, steht hier und wir addieren 0, 1,

33:30.740 --> 33:31.900
0, 1.

33:32.460 --> 33:32.900
So.

33:33.560 --> 33:36.340
Und das ist also der richtige Wert für Minus 5.

33:36.840 --> 33:39.560
Und die 0, 0, 0, 1 ist der richtige Wert für die 1.

33:41.120 --> 33:44.920
Das heißt, wir haben uns zwar bei der Komplimentbildung gespart, dass

33:44.920 --> 33:47.900
wir noch eine 1 addieren müssen, nach dem Kippen der Bits.

33:48.400 --> 33:53.240
Wir müssen aber bei der Addition den Überlauf, den wir bekommen, also

33:53.240 --> 33:56.400
jeden Überlauf Bit, dürfen das nicht mehr ignorieren.

33:57.320 --> 34:00.040
Das war die Reduktion modulo 2 ON.

34:00.040 --> 34:04.280
Sondern in diesem Fall machen wir die Reduktion modulo 2 ON minus 1.

34:05.700 --> 34:07.860
Das heißt, wir müssen eine 1 addieren.

34:08.860 --> 34:10.080
Das ist genau dieser Punkt.

34:10.200 --> 34:12.220
Das Überlauf-Bit addieren wir praktisch immer.

34:12.760 --> 34:16.580
Wenn das Überlauf-Bit eine 1 ist, wird es halt addiert.

34:16.620 --> 34:18.720
Wenn es eine 0 ist, das geht ja nicht weiter.

34:19.440 --> 34:25.340
Also in diesem Fall müssen wir eine 1 addieren.

34:25.460 --> 34:27.880
Das ist unser Einer-Rücklauf bei dem Einer-Kompliment.

34:29.020 --> 34:33.380
Da haben wir etwas mehr zu tun bei den Additionen, bei der Arithmetik,

34:33.800 --> 34:37.840
bei der Umwandlung, Komplimentbildung haben wir weniger zu tun als bei

34:37.840 --> 34:39.120
dem Zweier-Kompliment.

34:40.500 --> 34:43.800
Damit haben wir also diese Arithmetik uns auch angeschaut.

34:44.840 --> 34:47.240
Und dann gibt es natürlich noch den anderen Fall mit der

34:47.740 --> 34:48.220
Bereichsüberschreitung.

34:48.440 --> 34:49.540
Schauen wir uns das auch wieder an.

34:50.960 --> 34:52.240
Das gleiche wie vorher.

34:52.780 --> 34:54.000
1 und 1 ist 0.

34:54.480 --> 34:56.520
Übertrag 1, dann kriegen wir eine 1.

34:56.940 --> 34:58.520
Übertrag 1, kriegen wir eine 0.

34:58.640 --> 35:00.000
Übertrag 1 ist eine 1.

35:00.400 --> 35:01.440
Davor steht eine 0.

35:01.940 --> 35:05.920
Hier entsprechen die beiden Additionen 0, 1, 0 und 1.

35:06.280 --> 35:16.600
Wieder der Fall, dass das Vorzeichen der Summe hier steht, sich

35:16.600 --> 35:20.840
unterscheidet von dem Vorzeichen der beiden Argumente.

35:21.560 --> 35:24.820
Das heißt, wir haben den Zahlenbereich auch wieder genauso einfach zu

35:24.820 --> 35:28.440
erkennen, wie bei dem Zweier-Kompliment, dass es hier nicht

35:28.440 --> 35:29.040
unterscheidet.

35:30.620 --> 35:34.480
Damit haben wir hier die Eigenschaften wieder ganz einfach

35:34.480 --> 35:35.480
zusammengefasst.

35:35.960 --> 35:39.220
In diesem Fall ist das Ganze tatsächlich symmetrisch zum Nullpunkt.

35:39.780 --> 35:41.460
Da haben wir die 0 zweimal dargestellt.

35:42.140 --> 35:43.400
Komplimentbildung ist einfacher.

35:43.560 --> 35:44.300
Kippen der Bits.

35:45.060 --> 35:47.000
Suchtfraktion ist wieder eine Addition des Kompliments.

35:47.140 --> 35:49.300
Negation entsprechen Komplimentbildung.

35:49.880 --> 35:52.200
Überlaufbehandlung, Reduktionmodus 2 und 1.

35:52.420 --> 35:54.020
Das heißt, wir haben diesen Einer-Rücklauf.

35:54.780 --> 35:57.120
Wir müssen die 1 noch drauf ergreifen.

35:58.080 --> 36:00.500
Einfache Art, wie wir hier Arithmetik machen können.

36:01.340 --> 36:06.040
Und auf diese Art und Weise haben wir also jetzt eine Arithmetik auf

36:06.040 --> 36:09.540
kodierten Zahlen, die negativ und positiv sein können.

36:11.040 --> 36:12.920
So, damit können wir die ganzen Zahlen darstellen.

36:13.080 --> 36:16.120
Jetzt geht es darum, wie wir die reellen Zahlen darstellen können.

36:16.620 --> 36:18.040
Was sind denn eigentlich reelle Zahlen?

36:18.040 --> 36:24.180
Also, reelle Zahlen können rational sein.

36:24.860 --> 36:27.560
Dann habe ich einen Bruch von zwei ganzen Zahlen.

36:28.380 --> 36:29.240
Oder irrational.

36:29.740 --> 36:36.880
Dann haben wir eine Darstellung, die eine unendliche Folge von Dezimal

36:36.880 --> 36:37.280
stellt.

36:37.380 --> 36:39.240
Eine nicht abbrechende Dezimalentwicklung.

36:40.740 --> 36:44.400
Und eine nicht abbrechende Dezimalentwicklung können Sie natürlich in

36:44.400 --> 36:45.480
keinem Rechner darstellen.

36:45.480 --> 36:49.800
Weil wir halt unendlich viele Ziffern darstellen müssen.

36:50.160 --> 36:51.300
Das geht natürlich nicht.

36:52.060 --> 36:53.320
Also wir können...

36:53.320 --> 36:55.220
also wenn wir eine irrationale Zahl haben,

37:00.570 --> 37:02.290
die können wir nicht darstellen.

37:02.390 --> 37:06.430
Diese irrationalen Zahlen können im Rechner nicht exakt dargestellt

37:06.430 --> 37:06.830
werden.

37:08.270 --> 37:14.170
Jede exakte Darstellung einer Zahl, so durch irgendwelche Bits, ist

37:14.170 --> 37:17.970
eine Darstellung, die unendlich viele Bits hat und damit als

37:19.510 --> 37:22.210
Verhältnis von zwei ganzen Zahlen dargestellt werden kann.

37:23.150 --> 37:26.250
Trotzdem rechnen wir natürlich im Rechner mit reellen Zahlen.

37:27.430 --> 37:29.670
Das sind aber alles im Prinzip rationale Zahlen.

37:29.810 --> 37:33.330
Es sei denn, wir stellen diese irrationalen Zahlen auf symbolische Art

37:33.330 --> 37:34.110
und Weise dar.

37:34.790 --> 37:37.850
Dann können wir damit durchaus umgehen, aber das ist eine andere Ebene

37:37.850 --> 37:39.530
darüber zu reden.

37:39.670 --> 37:43.850
Zunächst mal müssen wir darum gehen, wenn wir reelle Zahlen als N

37:43.850 --> 37:49.330
-Bitworte darstellen können, es geht nur mit endlich vielen Bits und

37:49.330 --> 37:51.750
damit haben wir immer nur rationale Zahlen dargestellt.

37:51.910 --> 37:54.310
Wir haben also jede Zahl nur approximativ dargestellt.

37:56.010 --> 38:00.410
Einfache Beispiele sind natürlich hier 0,5 minus 10,75.

38:00.830 --> 38:02.550
Einfache, reelle Zahlen.

38:03.030 --> 38:05.730
Pi und E sind Beispiele für Zahlen, bei denen wir wissen, das sind

38:05.730 --> 38:06.650
irrationale Zahlen.

38:07.090 --> 38:08.770
Die können wir also nicht exakt darstellen.

38:10.090 --> 38:11.990
Jetzt gibt es Möglichkeiten, das unterschiedlich zu machen.

38:12.090 --> 38:16.330
Das ist eine Möglichkeit zu sagen, ich einige mich darauf, dass ich

38:16.330 --> 38:21.510
immer eine feste Anzahl von Stellen vor und hinter dem Dezimalpunkt

38:21.510 --> 38:21.870
habe.

38:22.790 --> 38:30.870
Zum Beispiel, wenn ich N-Bits habe, dann nehme ich N-M für Vorzeichen

38:31.730 --> 38:41.050
und Zahlen vor dem Punkt und dann habe ich noch M übrig rechts neben

38:41.050 --> 38:41.870
dem Dezimalpunkt.

38:44.150 --> 38:48.710
Eigentlich könnte ich auch sagen, Festpunkt kann auch den Punkt

38:48.710 --> 38:56.170
einfach durch Multiplikation mit 2 hoch M ganz nach rechts

38:56.170 --> 38:56.670
verschieben.

38:57.990 --> 38:59.970
Dann ist das Ganze eine ganze Zahl.

39:01.550 --> 39:05.890
Wenn ich eine solche Zahl, bei der ich M stelle, rechts habe neben dem

39:05.890 --> 39:10.150
Dezimalpunkt, wenn ich einfach mit 2 hoch M multipliziere, kommt eine

39:10.150 --> 39:11.050
ganze Zahl raus.

39:12.690 --> 39:15.250
Und dann kann ich ja das Gleiche machen, wie bei der Darstellung von

39:15.250 --> 39:15.930
ganzen Zahlen.

39:16.570 --> 39:21.890
Falls Festpunkt-Darstellung ganz einfach ist, das Problem ist nur, ich

39:21.890 --> 39:28.290
habe hier das Problem, dass ich nur eine feste Möglichkeit habe, eine

39:28.290 --> 39:30.750
feste Anzahl von Stellen vor dem Komma und hinter dem Komma.

39:32.150 --> 39:38.650
Und wenn ich also irgendeine Zahl darstellen will, wie 1,5 mal 10 hoch

39:38.650 --> 39:45.650
57 oder sowas, das ist durchaus eine Zahl, die interessant wäre, oder

39:45.650 --> 39:49.750
auch 10 hoch minus 57, das sind reelle Zahlen, mit denen ich umgehen

39:49.750 --> 39:51.130
möchte im Rechner.

39:52.350 --> 39:53.650
Wie mache ich das denn?

39:54.230 --> 39:57.090
Also so etwas kann ich mit Festpunkt nicht darstellen.

39:57.410 --> 40:02.550
Wenn ich also sowas darstellen möchte, 10 hoch minus 57 mal plus 57,

40:02.850 --> 40:05.250
dann müsste ich ja beliebig viele Stellen vor und hinter dem Komma

40:05.250 --> 40:05.790
haben können.

40:06.490 --> 40:07.690
Mit N-Bits geht das nicht.

40:08.990 --> 40:10.810
Da muss ich etwas anderes ausrechnen.

40:10.890 --> 40:14.730
Also das hier ist durchaus eine Darstellung, die man wählen kann, die

40:14.730 --> 40:18.890
aber eigentlich eher für die Darstellung nach außen sinnvoll ist,

40:18.990 --> 40:23.290
sofern ich tatsächlich Zahlen in diesem Bereich habe, also zwischen 2

40:23.290 --> 40:29.810
hoch N minus M also kleiner als 2 hoch N minus M und nicht wirklich

40:29.810 --> 40:31.970
kleiner als 0.

40:34.230 --> 40:35.990
Quatsch, nicht kleiner als 1.

40:36.310 --> 40:37.930
Also nicht wesentlich kleiner als 1.

40:39.530 --> 40:42.830
Also hier kann ich im Prinzip die Darstellungsmöglichkeiten der ganzen

40:42.830 --> 40:43.650
Zahlen verwenden.

40:44.270 --> 40:46.090
Festpunktdarstellung ist nicht wirklich interessant.

40:48.470 --> 40:54.530
Wichtiger ist, Zahlen darstellen zu können, die diese Darstellung

40:54.530 --> 40:56.990
haben, wie ich gerade eben angedeutet hatte, also zum Beispiel die

40:56.990 --> 40:58.030
Avogadro -Zahl.

40:59.230 --> 41:02.210
Eine Konstante aus der Chemie.

41:04.570 --> 41:09.870
6,0225 mal 10 hoch 21 oder die Planck-Konstante 6, das Planck'sche

41:09.870 --> 41:10.190
Wirkungsquantum.

41:11.150 --> 41:15.270
6,6 und noch ein paar weitere Ziffern mal 10 hoch minus 34.

41:16.590 --> 41:19.590
Solche Zahlen muss ich auch sinnvoll darstellen können.

41:20.250 --> 41:22.670
Natürlich kann man sich sofort überlegen, naja, ich brauche ja nur

41:22.670 --> 41:24.950
diese Zahl darzustellen.

41:25.790 --> 41:27.130
Das ist irgendein x.

41:27.710 --> 41:30.610
Dann muss ich wissen, es gibt hier irgendeine Basis.

41:32.130 --> 41:34.010
Und es gibt irgendein Exponenten.

41:34.730 --> 41:38.430
Wenn ich mich auf die Basis geeinigt habe, dann brauche ich eigentlich

41:38.430 --> 41:40.330
nur x und e darzustellen.

41:41.370 --> 41:42.590
Natürlich auch das Vorzeichen.

41:43.490 --> 41:44.370
Muss ich auch noch darstellen.

41:44.450 --> 41:46.370
Ob ich jetzt eine positive oder negative Zahl habe.

41:46.510 --> 41:47.590
Aber das wissen wir, wie man das macht.

41:48.470 --> 41:51.470
Entsprechend muss ich mir solche Zahlen geeignete Repräsentierungen

41:51.470 --> 41:52.030
überlegen.

41:52.030 --> 41:56.270
Dann kann ich solche sehr sehr großen und auch sehr sehr kleinen

41:56.270 --> 41:59.810
Zahlen, die also sehr unterschiedliche Größenordnung haben, sinnvoll

41:59.810 --> 42:00.190
darstellen.

42:01.030 --> 42:05.010
Das ist eine übliche Zahl der Art der Darstellung reeller Zahlen.

42:05.810 --> 42:09.050
Natürlich immer nur mit begrenzter Genauigkeit, wenn ich hier nur

42:09.050 --> 42:12.890
entsprechend wenige Dezimalstellen angebe.

42:13.410 --> 42:17.330
Grundsätzlich kann ich natürlich jede reelle Zahl in dieser Form

42:17.330 --> 42:22.150
repräsentieren als x, m mal w hoch i.

42:22.410 --> 42:26.950
Man schreibt nicht x mal w hoch e, sondern m mal w hoch i.

42:27.690 --> 42:31.630
Und ich habe hier also eine sogenannte Mantisse, m und gleich 0.

42:32.530 --> 42:36.190
Und einen Exponenten habe ich jetzt hier i genannt, also eine ganze

42:36.190 --> 42:37.250
Zahl als Exponent.

42:39.430 --> 42:45.030
Und damit das Ganze eindeutig ist, also ich könnte ja jede reelle Zahl

42:45.030 --> 42:48.110
auf sehr unterschiedliche Art und Weise darstellen, also solche

42:48.110 --> 42:51.450
Produkte von Mantisse und Basis hoch Exponent.

42:52.550 --> 42:56.750
Damit das Ganze eindeutig wird, normiere ich meine Gleitpunktzahlen

42:56.750 --> 43:02.930
und sage, die Mantisse soll vom Wert her immer zwischen 1 liegen und

43:02.930 --> 43:04.710
dieser Basis b.

43:05.710 --> 43:09.930
Also wenn ich Basis 10 habe, dann sollen also diese Werte zwischen 0

43:09.930 --> 43:11.210
und 9 liegen.

43:12.290 --> 43:16.890
Hier haben wir zwei Beispiele, wo wir einbeziehen, den Wert, das ist

43:16.890 --> 43:19.030
wieder so 6, irgendwas.

43:20.650 --> 43:22.030
Liegt zwischen 0 und 9.

43:23.390 --> 43:25.170
Und ich habe zwischen 1 und 9.

43:25.290 --> 43:27.370
Zwischen 1 würde ich mindestens 1 haben.

43:28.170 --> 43:31.530
Und dann maximal den Wert b-1.

43:32.310 --> 43:39.450
Wenn ich Basis 2 habe, also Basis 2, das betrachte, hätte ich nur

43:40.030 --> 43:43.830
Zahlen zwischen 1 und kleiner als 2 bei der Mantisse.

43:45.450 --> 43:51.670
Ich habe also als b 0, wie sieht das denn jetzt aus?

43:51.770 --> 44:02.170
Hier meine b irgendwas, ich sag mal hier b r 0, dann kommt hier Punkt

44:02.170 --> 44:09.090
b -1 b-2 hat ich m gesagt.

44:09.090 --> 44:10.270
Zum Beispiel.

44:11.470 --> 44:19.490
Hätte also das b-0 ist also in dem Fall die Ziffer vor dem

44:19.490 --> 44:26.950
Dezimalpunkt und bei den normierten Leitpunktzahlen steht also bei dem

44:26.950 --> 44:31.290
b -0 immer eine Ziffer ungleich 0.

44:32.980 --> 44:35.010
Die anderen tauchen ja gar nicht auf.

44:36.890 --> 44:40.590
Und ich habe also hier immer, wenn ich das zu Basis 2 betrachte, steht

44:40.590 --> 44:44.790
hier also immer eine 1 und dahinter stehen auch irgendwelche anderen

44:44.790 --> 44:45.130
Zahlen.

44:46.190 --> 44:48.770
Und man kann sich einfach überlegen, dass sich halt jede reale Zahl

44:48.770 --> 44:51.410
auf eindeutige Art und Weise darstellen kann als normierte

44:51.410 --> 44:55.950
Leitpunktzahl, wenn ich die Basis festgelegt habe, dann also für jede

44:55.950 --> 45:00.670
Basis natürlich eine eindeutige normierte Leitpunktzahl.

45:02.090 --> 45:02.230
So.

45:02.730 --> 45:06.510
Für b-gleich 10 zum Beispiel hier ein einfaches Beispiel das wäre eben

45:06.510 --> 45:10.270
eine solche Leitpunktzahl 1,017.

45:11.910 --> 45:15.550
Und jetzt überlegt man sich, wenn ich solche Zahlen dargestellt habe,

45:16.090 --> 45:20.310
auf diese Art und Weise also immer als irgendeine Mantisse mal Basis

45:20.310 --> 45:26.410
hoch e1 oder Mantisse m2 mal Basis hoch e2, jetzt möchte ich mit

45:26.410 --> 45:28.490
solchen Zahlen Operationen ausführen.

45:28.710 --> 45:32.210
Ich möchte also agieren, modifizieren, möchte die Werte vergleichen

45:32.210 --> 45:32.970
oder was auch immer.

45:34.210 --> 45:39.590
Also wenn ich die vergleichen möchte in der Größe, dann muss ich ja

45:39.590 --> 45:42.330
erst mal angucken, in welchem Bereich liegen die eigentlich.

45:43.970 --> 45:54.470
Also wenn e1 kleiner als e2 der Exponent der Zahl x1 kleiner als der

45:54.470 --> 45:58.950
Exponent bei der Zahl x2, dann ist natürlich klar, dass x1 kleiner als

45:58.950 --> 45:59.390
x2.

46:01.790 --> 46:07.230
Weil das m ja immer kleiner als b ist, das heißt ich kann durch die

46:07.230 --> 46:13.470
Modifikation mit m, mit der Mantisse, nicht diesen Unterschied

46:13.470 --> 46:15.510
zwischen den beiden Exponenten ausgleichen.

46:16.050 --> 46:21.530
Wenn die gleichen Exponentenhaare e1 und e2 identisch sind, dann ist

46:21.530 --> 46:26.850
natürlich x1 kleiner als x2, wenn die Mantisse von x1 kleiner ist als

46:26.850 --> 46:27.890
die Mantisse von m2.

46:29.550 --> 46:32.570
Das ist also auf die Art und Weise einfach festzustellen.

46:32.670 --> 46:35.830
Ich muss erst mal die Exponenten vergleichen.

46:35.890 --> 46:39.790
Wenn also die Differenz der beiden Exponenten ungleich 0 ist, dann

46:39.790 --> 46:43.550
weiß ich sofort, wie weit die unterschiedlich sind.

46:44.250 --> 46:48.270
Wenn die Differenz der beiden Exponenten 0 ist, dann muss ich mir

46:48.270 --> 46:50.230
anschauen, die Differenz der beiden Mantissen.

46:50.950 --> 46:58.390
Und wenn der halt, wenn m2-m1 halt ungleich 0 ist, dann weiß ich, ich

46:58.390 --> 47:00.970
habe x1 kleiner als x2.

47:02.290 --> 47:05.390
Und wenn ich feststellen will, ob zwei Zahlen gleich sind, was mache

47:05.390 --> 47:05.850
ich denn dann?

47:07.130 --> 47:08.650
Sie haben irgendeine Abfrage.

47:10.090 --> 47:13.970
Sie wollen feststellen, ich mache irgendeine Iteration so lange, bis

47:13.970 --> 47:16.230
irgendwie x gleich y.

47:17.290 --> 47:22.110
Oder x1 gleich x2.

47:22.110 --> 47:26.590
Also x1 gleich x2.

47:26.770 --> 47:29.350
Und dann geht das um die zwei verschiedene Möglichkeiten.

47:30.790 --> 47:37.710
Das Problem ist, natürlich müsste dann e1 gleich e2 sein und m1 gleich

47:37.710 --> 47:38.210
m2.

47:38.550 --> 47:39.350
Das ist schon richtig.

47:39.470 --> 47:40.470
Dann sind die beiden gleich.

47:42.170 --> 47:47.870
In dem Augenblick, wo ich hier Probleme habe mit der Anzahl der

47:47.870 --> 47:51.930
darstellbaren Bits, bekomme ich allerdings Probleme, damit ich Sie an

47:51.930 --> 47:53.330
dieser Stelle gleich darauf hinweisen.

47:54.810 --> 48:00.210
Sie haben, wenn Sie nur eine endliche Anzahl von Bits zur Verfügung

48:00.210 --> 48:03.770
haben, für die Darstellung dieser Zahlen, nur einen gewissen

48:03.770 --> 48:05.390
Zahlenbereich für die Mantisse.

48:07.210 --> 48:12.770
Und jetzt gibt es zum Beispiel zwei Möglichkeiten, eine Zahl, ich sag

48:12.770 --> 48:13.510
mal einfach die Zahl

48:18.190 --> 48:27.530
1.999999 die Zahl 1.999999 und die Zahl 2.000000.

48:28.530 --> 48:30.590
Die sind ja als reale Zahlen eigentlich identisch.

48:31.170 --> 48:33.130
In der Darstellung aber unterschiedlich.

48:35.430 --> 48:35.610
Ja?

48:37.070 --> 48:40.490
Das heißt, wenn Sie auf diese Art und Weise das suchen würden, würden

48:40.490 --> 48:42.090
Sie feststellen, die beiden sind verschieden.

48:42.750 --> 48:43.790
Sie sind aber identisch.

48:45.450 --> 48:52.290
Das heißt, man sollte, wenn man in einem Programm eine Abfrage machen

48:52.290 --> 48:57.170
möchte, oder etwas abfragen möchte, in der Art, ob zwei Werte gleich

48:57.170 --> 49:01.130
sind in den Zahlen, dann bekommt man einfach Probleme, weil man diese

49:01.130 --> 49:03.970
Gleichheit eventuell gar nicht feststellen kann.

49:05.090 --> 49:11.130
Das heißt, man sollte dann lieber fragen, ob der Betrag von x1 minus

49:11.130 --> 49:14.690
x2 kleiner als ein y.

49:17.450 --> 49:22.850
Wenn ich das abfragen kann, dann habe ich eine sinnvolle Abfrage.

49:23.210 --> 49:26.290
Es macht bei reellen Zahlen keinen Sinn, auf Gleichheit zu

49:26.290 --> 49:26.710
feststellen.

49:27.990 --> 49:29.350
Das sieht man an dieser Stelle sofort.

49:30.890 --> 49:34.930
Jetzt ist die Frage, wie addiere ich solche Zahlen?

49:35.070 --> 49:36.970
Ich habe zwei Zahlen, die sollen addiert werden.

49:37.870 --> 49:39.010
x1 und x2.

49:40.810 --> 49:45.030
Und da muss ich natürlich zunächst mal dafür sorgen, dass die

49:45.030 --> 49:46.410
Exponenten angeglichen werden.

49:47.230 --> 49:48.870
Ich habe hier meine beiden Zahlen.

49:49.810 --> 49:50.870
Das ist mein Exponent.

49:52.250 --> 49:57.210
Und damit sich die Bits auf die gleiche Stellenwertigkeit beziehen,

49:57.670 --> 50:01.050
kann es eben sein, dass ich die Mantissen gegeneinander verschieben

50:01.050 --> 50:01.310
muss.

50:02.370 --> 50:06.930
Mantissen gegeneinander verschieben heißt, ich muss die Differenz der

50:06.930 --> 50:12.050
beiden Exponenten mir anschauen und muss die eine Mantisse und genau

50:12.050 --> 50:13.430
diese Differenz verschieben.

50:15.050 --> 50:21.230
Dann bekomme ich eine Stellenwertrichtige Anordnung meiner Bits der

50:21.230 --> 50:23.170
beiden Mantissen, M1 und M2.

50:23.970 --> 50:26.570
Und dann kann ich die entsprechend addieren.

50:27.490 --> 50:33.010
Was sind denn dann die richtigen Werte, wenn ich nur eine begrenzte

50:33.010 --> 50:33.810
Zahl von Bits habe?

50:33.930 --> 50:34.890
Da kommen wir später noch drauf.

50:35.330 --> 50:39.150
Auf jeden Fall muss ich also, damit die Zahlen richtig addiert werden,

50:39.150 --> 50:45.530
sagen, ich addiere also M1 mal B hoch E1 und verschobene Mantisse 2

50:45.530 --> 50:47.310
auch mal B hoch E1.

50:48.730 --> 50:53.010
Das gibt dann entsprechend meinen neuen Wert.

50:53.430 --> 50:59.470
Das gibt also M1 plus M2 mal B hoch E2 minus E1 mal B hoch E1.

51:00.550 --> 51:04.270
Und das gibt dann meine neue Gleitpunktzahl.

51:04.910 --> 51:06.210
Jetzt muss die normiert sein.

51:06.210 --> 51:09.230
Das soll eine normierte Gleitpunktzahl sein.

51:09.670 --> 51:16.050
Wenn also dieser Wert, der dort steht, M1 plus M2 mal B hoch E2 minus

51:16.050 --> 51:24.190
E1, wenn der Wert größer wird als B, oder größer gleich B ist, dann

51:24.190 --> 51:26.170
muss ich noch etwas tun.

51:26.270 --> 51:29.330
Wenn er also kleiner ist als B, bin ich in dem Bereich der normierten

51:29.330 --> 51:30.190
Zahlen geblieben.

51:30.630 --> 51:33.630
Dann ist der neue Exponent E1.

51:33.630 --> 51:39.670
Wenn der Wert größer geworden ist, also größer gleich B ist, dann muss

51:39.670 --> 51:42.410
ich im Prinzip den Wert noch mal durch B dividieren.

51:42.530 --> 51:47.130
Und das heißt, ich muss einfach meine Exponenten entsprechend um 1

51:47.130 --> 51:47.590
erhöhen.

51:48.330 --> 51:57.310
Also Mantisse und durch B dividiert heißt, ich muss bei dem Exponenten

51:57.310 --> 51:58.290
eine 1 drauf addieren.

51:59.930 --> 52:01.670
Und dann habe ich das richtig gemacht.

52:01.670 --> 52:03.750
Und das heißt, die Addition ist gar nicht so einfach.

52:03.910 --> 52:04.730
Ich habe mehrere Schritte.

52:05.690 --> 52:12.670
Ich muss zunächst mal die Mantisse verschieben um E2 minus E1.

52:14.450 --> 52:15.750
Das ist der erste Schritt.

52:16.530 --> 52:19.990
Dann muss ich die Mantissen, die so verschobenen Mantissen addieren.

52:20.490 --> 52:22.050
Und dann muss ich noch normieren.

52:22.930 --> 52:24.210
Mehrere Schritte nacheinander.

52:25.890 --> 52:29.790
Das heißt, Leitpunkt Addition ist ein durchaus etwas aufwändiger

52:29.790 --> 52:30.070
Schritt.

52:32.010 --> 52:34.250
Wenn wir subtrahieren, geht es im Prinzip genauso.

52:34.510 --> 52:36.090
Das ist also kein großer Unterschied.

52:37.290 --> 52:44.090
Und bei der Multiplikation da muss ich folgendes machen.

52:44.510 --> 52:49.810
Wenn ich zwei solche normierten Leitpunktzahlen multipliziere, dann

52:49.810 --> 52:53.610
muss ich also einfach M1 und M2 multiplizieren.

52:55.210 --> 52:58.970
Und ich muss die beiden Potenzen multiplizieren.

52:59.130 --> 53:01.070
B hoch E1 mal B hoch E2.

53:01.470 --> 53:03.970
Das gibt aber gerade B hoch E1 plus E2.

53:05.070 --> 53:11.870
Das heißt, ich muss in dem Fall die Exponenten addieren und die

53:11.870 --> 53:16.290
Mantissen multiplizieren und anschließend natürlich noch normieren.

53:16.910 --> 53:20.710
Also in diesem Fall Multiplikation der Mantissen, Addition der

53:20.710 --> 53:23.230
Exponenten und anschließend normalisieren.

53:24.010 --> 53:27.150
Diese beiden Operationen kann ich aber parallel machen, da oben.

53:27.410 --> 53:30.270
Multiplizieren der Mantissen und Addieren der Exponenten, das geht

53:30.270 --> 53:30.890
gleichzeitig.

53:32.210 --> 53:35.450
Während wir hier oben eine strenge Folge von Operationen haben.

53:36.290 --> 53:42.870
Erst verschieben, also erst Exponenten subtrahieren voneinander, dann

53:42.870 --> 53:48.090
verschieben um die Differenz, danach addieren, danach normieren.

53:48.610 --> 53:52.510
Bei der Multiplikation brauche ich nur zu multiplizieren und zu

53:52.510 --> 53:54.670
addieren, das mache ich gleichzeitig und anschließend noch einmal

53:54.670 --> 53:55.070
normieren.

53:55.970 --> 53:56.930
Und dann bin ich damit fertig.

53:59.050 --> 54:03.290
Also das zeigt schon, die Gleitpunkt-Arithmetik ist deutlich

54:03.290 --> 54:08.730
aufwendiger als die einfache Arithmetik auf reellen Zahlen und auch

54:08.730 --> 54:09.550
auf ganzen Zahlen.

54:11.250 --> 54:15.690
Das Problem, das ich hier in rot schon angedeutet habe, ist, wir haben

54:15.690 --> 54:17.770
in der Realität Rundungsfehler.

54:17.770 --> 54:21.730
Wir haben nur eine begrenzte Anzahl von Bits zur Verfügung für die

54:21.730 --> 54:24.230
Darstellung von Zahlen und dadurch bekomme ich natürlich viele in der

54:24.230 --> 54:24.750
Darstellung.

54:25.370 --> 54:28.230
Und insbesondere, wenn ich solche Operationen mache, da werden Sie

54:28.230 --> 54:30.210
gleich noch Beispiele zu sehen, was da passieren kann.

54:31.370 --> 54:34.590
Also das ist Arithmetik normierter Gleitpunktzahlen.

54:34.770 --> 54:37.790
Wenn Sie eine Drehzahl immer als normierte Gleitpunktzahl darstellen

54:37.790 --> 54:43.130
wollen, müssen Sie entsprechend hier diese Repräsentationen

54:44.030 --> 54:47.010
modifizieren, um richtig addieren zu können und anschließend wieder

54:47.010 --> 54:49.970
die richtige normierte Gleitpunktzahl ermitteln.

54:51.470 --> 54:51.830
Gut.

54:52.190 --> 54:55.290
Jetzt kommen wir zur Dualdarstellung solcher normierten

54:55.290 --> 54:57.850
Gleitpunktzahlen mit einer begrenzten Zahl von Bits.

54:58.950 --> 55:02.970
Das heißt, wir haben N Bits zur Verfügung und wir wissen, es gibt

55:02.970 --> 55:04.610
diese eindeutige Darstellung.

55:05.230 --> 55:06.490
Jetzt müssen wir sehen, wie das passiert.

55:06.570 --> 55:08.270
Natürlich nur x ungleich 0.

55:08.590 --> 55:11.290
Was für x gleich 0 passiert, müssen wir uns nochmal überlegen.

55:13.110 --> 55:17.430
Wie man das darstellen wird, das werden wir gleich noch ansprechen.

55:18.010 --> 55:24.210
Zunächst mal muss ich also eine Zahl ungleich 0 sinnvoll darstellen

55:24.210 --> 55:24.950
mit N Bits.

55:25.450 --> 55:31.270
Und ich teile einfach auf, meine Bits auf die Darstellung der Mantisse

55:31.810 --> 55:34.630
und auf die Darstellung des Exponenten.

55:35.570 --> 55:38.130
Und Sie sehen, auch das ist wieder gar nicht so einfach.

55:38.730 --> 55:43.110
Zunächst mal sage ich, ich nehme k Bits für die Darstellung der

55:43.110 --> 55:44.670
Mantisse einschließlich Vorzeichen.

55:44.790 --> 55:55.370
Das heißt, ich habe k-1 Bits für meine Mantisse und N-k Bits für den

55:55.370 --> 55:56.110
Exponenten.

55:56.510 --> 55:58.030
Jetzt sehen Sie ja gar nicht den Exponenten.

55:58.070 --> 55:59.550
Da steht eine Charakteristik.

56:01.350 --> 56:02.730
Diese Charakteristik.

56:03.810 --> 56:09.510
Der Exponent ist eine Zahl, die kann positiv oder negativ sein.

56:09.510 --> 56:10.350
Eine ganze Zahl.

56:11.310 --> 56:14.810
Und wir wollen natürlich wieder entsprechend die Daten und die ganzen

56:14.810 --> 56:15.710
Zahlen verwenden.

56:17.010 --> 56:19.530
Und damit man die Operation, die wir gerade auf der vorigen Seite

56:19.530 --> 56:22.790
gesehen haben, die wir ausführen müssen, wenn wir noch die

56:23.470 --> 56:26.370
Leitpunktzahlen addieren, modifizieren, subtrahieren, dividieren usw.

56:27.030 --> 56:30.890
Damit wir die auf eine effiziente Art und Weise machen können, wählt

56:30.890 --> 56:36.770
man für die Darstellung des Exponenten eine Darstellung ...

56:39.550 --> 56:40.430
...

56:40.430 --> 56:44.130
die XSQ-Darstellung des Exponenten.

56:44.650 --> 56:51.410
XSQ hieß doch, ich habe meinen Zahlenstrahl da ist ein bestimmter

56:51.410 --> 56:54.690
Zahlenbereich angegeben, den ich darstellen möchte.

56:56.170 --> 56:59.590
Also ein unterer Wert und ein oberer Wert.

57:00.750 --> 57:03.730
Und ich habe N-Bits zur Verfügung.

57:03.730 --> 57:08.990
Also habe ich hier gerade das ist so etwa 2 hoch N-1 z.B.

57:10.930 --> 57:12.470
N-1 ...

57:13.750 --> 57:15.550
unterschiedliche Arten das darzustellen.

57:16.190 --> 57:24.250
Und hier irgendwie 2 hoch N-1 Wir wissen, da muss ich überlegen.

57:24.510 --> 57:27.930
Einer Kompliment, zweier Kompliment oder XSQ.

57:28.010 --> 57:33.390
Und XSQ hieß, ich schiebe einfach diesen ganzen Bereich hier nach

57:33.390 --> 57:36.570
rechts um Q-Positionen.

57:37.330 --> 57:42.470
Und das Q soll gerade entsprechend dafür sorgen, dass dieser Wert U

57:42.470 --> 57:43.950
geschoben wird auf die Null.

57:45.570 --> 57:48.710
Das heißt, ich muss genau diesen Wert um diesen Wert das Ganze

57:49.590 --> 57:49.990
verschieben.

57:50.090 --> 57:50.930
Es gibt hier ein N.

57:51.890 --> 57:54.010
N-Bit-Zahlen-Darstellungen.

57:54.390 --> 57:57.750
Wir haben aber nur N-K-Bits zur Verfügung.

57:59.150 --> 58:06.510
Also ist dieses Q, ich sagte, das ist 2 hoch Anzahl der Bits minus 1,

58:06.750 --> 58:14.370
minus 1 2 hoch N-K minus 1, minus 1 Also genau diese Verschiebung um

58:14.370 --> 58:16.830
den halben Zahlenbereich.

58:17.530 --> 58:18.490
Das ist das, was wir machen.

58:18.630 --> 58:23.270
Und der Vorteil ist, dann sind alle unsere Exponenten schön numerisch

58:23.270 --> 58:24.590
aufsteigend dargestellt.

58:25.650 --> 58:29.930
Und ich kann diese Operationen, ist ein Exponent kleiner als der

58:29.930 --> 58:33.910
andere, durch Vergleich der Dualzahlen also einfach diese

58:34.470 --> 58:35.890
Charakteristikwerte machen.

58:36.910 --> 58:40.010
Ich habe hier kein Problem damit, wie bei der Zweierkompliment oder

58:40.010 --> 58:43.650
Einerkompliment -Darstellung, dass bei der Interpretation als Dualzahl

58:43.650 --> 58:45.550
ich mit dem Vorzeichen aufpassen muss.

58:45.990 --> 58:47.750
Dieses Problem ist hier beseitigt.

58:47.970 --> 58:51.170
Das heißt, ich kann Vergleiche von Exponenten sehr einfach machen auf

58:51.170 --> 58:51.870
die Art und Weise.

58:52.910 --> 58:57.130
Und diesen verschobenen Wert, den nennt man dann Charakteristik.

58:58.250 --> 59:02.570
Das heißt, die Charakteristik ist der Wert, den ich bekomme, wenn ich

59:02.570 --> 59:06.450
den Exponenten gerade um den halben Wert des darstellbaren

59:06.450 --> 59:08.110
Zahlenbereichs verschiebe.

59:09.030 --> 59:12.770
Ja, also diese XSQ-Darstellung, dann habe ich hier die schön

59:12.770 --> 59:14.250
dargestellt, alle in diesem Bereich.

59:15.050 --> 59:20.530
Hier die negativen, negativen, positive und entsprechend.

59:21.570 --> 59:24.170
Ist das dann über die Charakteristik so dargestellt.

59:24.750 --> 59:27.910
Und jetzt steht hier die Mantisse, da steht aber auch nicht die

59:27.910 --> 59:31.410
Mantisse, die wir eigentlich haben, sondern Betrag der Mantisse minus

59:31.410 --> 59:31.830
1.

59:33.530 --> 59:34.590
Warum das?

59:35.350 --> 59:39.290
Für die Mantisse machen wir zur Basis 2, äh Quatsch, die

59:40.310 --> 59:41.850
Leitpunktverandachung zur Basis 2.

59:42.330 --> 59:47.310
Bei Basis 2 haben alle Mantissen als erstes Bild vor dem Punkt immer

59:47.310 --> 59:47.890
eine 1.

59:48.510 --> 59:54.350
Danach stehen hier irgendwelche B-1, B-2 und so weiter bis B- und so

59:54.350 --> 59:54.670
weiter.

59:56.010 --> 01:00:00.630
Das heißt, wenn ich weiß, jede Mantisse hat hier vorne eine 1 stehen,

01:00:01.110 --> 01:00:03.010
dann brauche ich diesen Wert nicht abzuspeichern.

01:00:03.490 --> 01:00:05.590
Weil der ja immer da sein muss.

01:00:07.210 --> 01:00:10.530
Abspeichern muss ich nur das, was ich verändern kann und das sind die

01:00:10.530 --> 01:00:11.270
Werte, die dort stehen.

01:00:12.390 --> 01:00:18.410
Deswegen Betrag der Mantisse minus 1 und ich weiß, wenn ich also den

01:00:18.410 --> 01:00:23.070
Wert der Zahl ermitteln möchte, wie dargestellt wird, dann muss ich

01:00:24.210 --> 01:00:25.850
mein Vorzeichen berücksichtigen.

01:00:26.450 --> 01:00:29.110
Minus 1 hoch Vorzeichen bit.

01:00:29.750 --> 01:00:31.810
Wenn das eine 1 ist, steht da also minus 1.

01:00:32.550 --> 01:00:33.970
Wenn das 0 ist, steht dort 0.

01:00:34.950 --> 01:00:37.470
Also minus 1 hoch 0 ist halt 1.

01:00:38.990 --> 01:00:41.010
Und, äh, steht nicht 0, sondern 1 da dann.

01:00:41.350 --> 01:00:44.830
Plus 1 oder Minus 1, je nachdem, ob das auch 0 oder 1 ist.

01:00:44.830 --> 01:00:51.570
Und, äh, dann muss ich auf den Wert, der dort steht, dieses Betrag der

01:00:51.570 --> 01:00:58.330
Mantisse minus 1, das m' 1 draufaddieren und das Ganze modifizieren

01:00:58.830 --> 01:01:00.830
mit dem Exponenten.

01:01:01.570 --> 01:01:05.010
Das heißt, von der Charakteristik, die dargestellt ist, muss ich

01:01:05.010 --> 01:01:10.190
gerade diesen Wert q abziehen, damit ich wieder die richtige

01:01:10.190 --> 01:01:13.870
Rücktransformation mache, auf den tatsächlichen Wert des Exponenten.

01:01:14.870 --> 01:01:21.470
Also das ist die Zahl, die durch diese Darstellung sich ergibt.

01:01:22.170 --> 01:01:26.250
Ich habe also Vorzeichen, ich habe Charakteristik, Mantisse minus 1.

01:01:27.470 --> 01:01:30.110
Und ich muss also minus 1 hoch Vorzeichen bit nehmen.

01:01:30.270 --> 01:01:32.070
Das gibt entweder plus 1 oder minus 1.

01:01:32.730 --> 01:01:36.090
Ich muss auf die Mantisse m'1 addieren, damit ich die richtige

01:01:36.090 --> 01:01:36.910
Mantisse habe.

01:01:37.490 --> 01:01:41.550
Und ich muss von der Charakteristik gerade diesen, äh,

01:01:42.370 --> 01:01:43.830
Verschiebungswert q abziehen.

01:01:43.910 --> 01:01:49.610
Der Verschiebungswert ist gerade die Hälfte des, im Prinzip, mit n

01:01:49.610 --> 01:01:53.190
-bits oder in dem Fall mit n-k-bits darstellbaren Zahlenbereichs.

01:01:54.510 --> 01:01:59.990
Damit habe ich jetzt eine Darstellung für beliebige reelle Zahlen mit

01:01:59.990 --> 01:02:04.330
n -bits bis auf die 0.

01:02:04.970 --> 01:02:07.670
Und natürlich muss ich mir hier auch überlegen, was passiert, wenn ich

01:02:07.670 --> 01:02:10.710
jetzt aus dem darstellbaren Bereich raus laufe.

01:02:11.510 --> 01:02:15.390
Wenn ich Zahlen addiere und ich hab da einfach ja, irgendwie muss da

01:02:15.390 --> 01:02:18.990
was verschieben, dann fallen ja irgendwelche bits weg oder was

01:02:18.990 --> 01:02:22.290
passiert denn, wenn ich eine Zahl, wenn ich auf einmal sehr kleine

01:02:22.290 --> 01:02:24.610
Zahlen habe, was mache ich denn mit den Zahlen zwischen 0 und 1?

01:02:26.730 --> 01:02:27.450
0, irgendetwas.

01:02:27.890 --> 01:02:28.690
Kann ich ja gar nicht darstellen.

01:02:29.970 --> 01:02:34.890
Was passiert dann mit, wenn ich also die Zahl 0,123, na gut, ich

01:02:34.890 --> 01:02:36.890
könnte sie ja einfach verschieben.

01:02:37.890 --> 01:02:42.150
Ja, ich könnte das ja genauso mit 1,23 oder mal 10 und minus 1.

01:02:43.190 --> 01:02:44.170
Das ist ja kein Problem.

01:02:44.310 --> 01:02:47.990
Aber ich kann mir sofort überlegen, es gibt hier Zahlen, die sind

01:02:47.990 --> 01:02:50.830
einfach nicht vernünftig darstellbar.

01:02:51.150 --> 01:02:53.190
Das sind Sonderfälle, auf die ich gleich noch eingehen darf.

01:02:54.970 --> 01:02:57.810
Für diese Darstellung der Zahlen kann man sich nun, also das ist so

01:02:57.810 --> 01:03:00.810
das allgemeine Schema, überlegen, wie teile ich das denn jetzt auf?

01:03:00.850 --> 01:03:01.910
Wie wähle ich den Wert k?

01:03:03.150 --> 01:03:03.990
Wie wähle ich den Wert n?

01:03:04.410 --> 01:03:05.570
Was ist denn da überhaupt sinnvoll?

01:03:05.950 --> 01:03:07.570
Und dafür gibt es internationale Standards.

01:03:07.850 --> 01:03:09.270
Das war zu Anfang nicht der Fall.

01:03:09.370 --> 01:03:10.630
Hier kommt gleich ein Beispiel.

01:03:11.470 --> 01:03:14.870
Sie können sich vorstellen, wenn Sie das auf jedem Rechner

01:03:14.870 --> 01:03:20.730
unterschiedlich machen, dann würden Ihre Programme völlig

01:03:20.730 --> 01:03:23.210
unterschiedliche Ergebnisse liefern, je nachdem, auf welchem Rechner

01:03:23.210 --> 01:03:24.470
Sie diese Programme ausführen.

01:03:25.870 --> 01:03:29.230
Wenn Sie das, je nachdem, wie viele Bits diese Charakteristik und

01:03:29.230 --> 01:03:32.130
Mathese verwenden, hätten Sie unterschiedliche Darstellungen.

01:03:32.750 --> 01:03:37.910
Genau das ist in der Anfangszeit der Rechner so gewesen, dass die

01:03:37.910 --> 01:03:40.570
Darstellung der reellen Zahlen unterschiedlich war.

01:03:41.430 --> 01:03:42.710
Floating Point usw.

01:03:42.850 --> 01:03:43.890
war nicht standardisiert.

01:03:45.310 --> 01:03:48.630
Und in dem Fall ist es einfach nicht möglich, ohne weitaus ein

01:03:48.630 --> 01:03:51.730
Programm von einem Rechner auf den anderen zu übertragen und dort

01:03:51.730 --> 01:03:52.290
laufen zu lassen.

01:03:52.550 --> 01:03:55.750
War in der Anfangszeit der Rechner auch nicht erforderlich, weil man

01:03:55.750 --> 01:03:57.370
ein Programm für einen Rechner geschrieben hat.

01:03:58.530 --> 01:04:02.130
Und sobald Sie diese Programme transferieren, würden Sie

01:04:02.130 --> 01:04:04.310
unterschiedliche Ergebnisse bekommen, wenn die Darstellungen

01:04:04.310 --> 01:04:05.130
unterschiedlich sind.

01:04:05.890 --> 01:04:08.370
Schauen wir uns nochmal kurz an, wie das jetzt nochmal, um das

01:04:08.370 --> 01:04:16.110
Beispiel anzuschauen, wie entsteht also solch eine Leitpunktzahl mit

01:04:16.110 --> 01:04:17.970
einer bestimmten Anzahl von Bits.

01:04:18.330 --> 01:04:21.530
Und hier habe ich jetzt eine sehr einfache Darstellung gewählt.

01:04:21.770 --> 01:04:28.730
Ein Vorzeichen-Bit, 3 Bits für die Charakteristik und 4 Bits für die

01:04:28.730 --> 01:04:29.510
Mantisten.

01:04:30.230 --> 01:04:34.990
Wir wollen Zahl 5,75 als Leitpunktzahl darstellen.

01:04:36.070 --> 01:04:39.110
Das ist eine positive Zahl, deswegen haben wir hier vorne schonmal

01:04:39.110 --> 01:04:40.270
eine Null stehen.

01:04:41.050 --> 01:04:42.010
Das ist ganz einfach.

01:04:42.710 --> 01:04:43.610
Und dann geht es weiter.

01:04:44.930 --> 01:04:47.350
Charakteristik hat 3 Bits.

01:04:48.490 --> 01:04:53.630
3 Bits heißt, ich muss, um das Q zu berechnen, für meine XSQ

01:04:53.630 --> 01:04:57.410
-Darstellung, muss ich von der 3 1 abziehen.

01:04:59.330 --> 01:05:00.970
2 hoch 3 minus 1.

01:05:01.450 --> 01:05:03.810
Und davon noch 1 subtrahieren.

01:05:04.210 --> 01:05:05.790
Es gibt also gerade die Zahl der 1.

01:05:07.350 --> 01:05:08.270
Ich muss also...

01:05:09.050 --> 01:05:11.470
Ich habe ja 8 Zahlen, die ich darstellen kann.

01:05:13.470 --> 01:05:16.910
Die Hälfte ist mal 4 und dann davon nochmal minus 1.

01:05:17.050 --> 01:05:20.310
Das gibt mir dann gerade meine Verschiebung.

01:05:20.410 --> 01:05:21.050
Das ist das Q.

01:05:21.050 --> 01:05:28.030
Also um 3 muss ich den Wert der Charakteristik reduzieren, damit ich

01:05:28.030 --> 01:05:29.010
einen Exponenten bekomme.

01:05:31.070 --> 01:05:32.570
Jetzt habe ich die 5,75.

01:05:34.410 --> 01:05:39.470
Die muss ich jetzt irgendwie umwandeln in eine Leitpunktzahl.

01:05:40.770 --> 01:05:44.410
5,75 ist doch 5 plus 3,40.

01:05:45.290 --> 01:05:49.390
5 ist 2 hoch 2 plus 1.

01:05:51.250 --> 01:05:51.810
Plus...

01:05:51.810 --> 01:05:54.250
Ja, das 3,40 ist ein Halb.

01:05:55.230 --> 01:05:56.690
Plus ein Viertel.

01:05:58.490 --> 01:06:05.530
Das heißt, ich habe hier stehen 2 hoch 2 plus 2 hoch 0 plus 2 hoch

01:06:05.530 --> 01:06:07.310
minus 1 plus 2 hoch minus 2.

01:06:10.410 --> 01:06:16.310
Das heißt doch, das Ganze ist 2 hoch 2 mal, das kann ich mit 2 hoch 2

01:06:16.310 --> 01:06:24.430
aus, dann steht hier 1 plus 1 durch 2 hoch 2 macht 2 hoch minus 2

01:06:24.430 --> 01:06:27.770
entsprechend hier 2 hoch minus 3 und 2 hoch minus 4.

01:06:28.990 --> 01:06:31.510
Das heißt, jetzt habe ich ja eine Darstellung als nur mit der

01:06:31.510 --> 01:06:32.110
Leitpunktzahl.

01:06:33.530 --> 01:06:43.670
2 hoch 2 als erstes Basishochexponent mal 1 plus ein Wert, der ist

01:06:43.670 --> 01:06:45.110
kleiner als 1.

01:06:47.230 --> 01:06:49.830
1, das heißt, da kommt den Faraus 1 Punkt irgendwas.

01:06:50.690 --> 01:06:51.650
Aber das ist ja ganz einfach.

01:06:53.650 --> 01:06:55.150
1, die brauche ich nicht abzuspeichern.

01:06:55.310 --> 01:06:56.950
Dieser 1 hier kann ich ignorieren.

01:06:57.910 --> 01:06:58.930
Da steht hier minus 2.

01:06:59.190 --> 01:07:01.030
Also muss ich an der Stelle eine 1 machen.

01:07:02.090 --> 01:07:05.230
Bei minus 3 muss ich eine 1 machen und bei minus 4 eine 1 machen.

01:07:05.590 --> 01:07:06.290
Und dann eine 0.

01:07:08.510 --> 01:07:10.270
Das ist offensichtlich meine Mantis.

01:07:12.190 --> 01:07:15.050
Und jetzt ist die Frage, was steht denn jetzt bei der Charakteristik?

01:07:15.150 --> 01:07:18.010
Ich muss um 3 verschieben.

01:07:18.410 --> 01:07:19.770
Die Charakteristik ist 2.

01:07:20.690 --> 01:07:28.650
Also, ich muss in dem Fall als Charakteristik 3 addieren, gibt 5.

01:07:29.190 --> 01:07:32.390
Das heißt, in dem Fall muss ich die Lineardarstellung von 5 dorthin

01:07:32.390 --> 01:07:33.850
schreiben, dass gerade 1 0 ist.

01:07:34.730 --> 01:07:41.950
Und damit habe ich meine Darstellung, Dualdarstellung von 5,75 als

01:07:41.950 --> 01:07:50.310
Leitpunktzahl in diesem Schema mit Vorzeichen, Charakteristik und

01:07:50.310 --> 01:07:51.570
Mantisse minus 1.

01:07:52.630 --> 01:07:54.510
Das ist jetzt eine solche Zahl.

01:07:55.530 --> 01:08:01.790
Auf die Art und Weise kann man für beliebige Kombinationen von Bits

01:08:01.790 --> 01:08:06.030
für Charakteristik und Bits für Mantisse kann man also solche Zahlen

01:08:06.030 --> 01:08:06.930
wählen.

01:08:07.450 --> 01:08:10.270
Und natürlich einigt man sich, wie viele Bits man normalerweise

01:08:10.270 --> 01:08:10.950
verwendet.

01:08:11.390 --> 01:08:14.130
Diese Einigung ist das, was man...

01:08:14.530 --> 01:08:16.230
Genau, das hatte ich alles schon gesagt.

01:08:16.450 --> 01:08:18.590
Das ist also unsere Zahl, die habe ich da oben schon hingeschrieben.

01:08:19.710 --> 01:08:24.910
Und jetzt gibt es ein Standard von IEEE, also Standardisierung oder

01:08:24.910 --> 01:08:29.210
das ist halt die Gesellschaft der Ingenieure, Elektrotechnik

01:08:29.210 --> 01:08:29.810
-Ingenieure.

01:08:30.950 --> 01:08:35.050
Und das muss natürlich alles festgelegt werden.

01:08:35.170 --> 01:08:39.770
Da hat man vor 4 Jahren das hat es aktualisiert und hat jetzt folgende

01:08:39.770 --> 01:08:40.250
Darstellung.

01:08:40.590 --> 01:08:41.610
Einfache Genauigkeit.

01:08:41.970 --> 01:08:45.670
Einfach heißt, ich nehme ein Wort hier.

01:08:45.850 --> 01:08:46.570
Ein Wort.

01:08:47.130 --> 01:08:52.770
Speicherwort hat standardmäßig 32 Bits.

01:08:52.990 --> 01:08:55.530
Das heißt von Bit 0 bis zu Bit 31.

01:08:56.290 --> 01:08:56.930
Ich klicke hier nochmal.

01:08:57.850 --> 01:08:59.050
Wortbreite 1.

01:08:59.910 --> 01:09:01.230
Also einfache Genauigkeit.

01:09:01.970 --> 01:09:02.330
Einfach.

01:09:03.250 --> 01:09:03.890
Ein Wort.

01:09:03.890 --> 01:09:08.830
Das ist der Datentyp Float oder Reel in Programmiersprache.

01:09:09.070 --> 01:09:12.930
Wenn wir also in Java Float sagen, dann haben wir eine Darstellung der

01:09:12.930 --> 01:09:14.890
Zahlen mit 32 Bits.

01:09:15.050 --> 01:09:16.190
Mit einer Aufteilung.

01:09:17.170 --> 01:09:19.770
1 Bit für Vorzeichen.

01:09:21.010 --> 01:09:25.050
Entsprechend 8 Bits für die Charakteristik.

01:09:26.130 --> 01:09:28.750
Also 256 mögliche Exponenten.

01:09:28.990 --> 01:09:34.930
Aufgeteilt auf die Bereiche Minus 127 eigentlich.

01:09:35.950 --> 01:09:38.450
Bis 128.

01:09:39.050 --> 01:09:39.590
Aber nein.

01:09:40.170 --> 01:09:42.870
Da sehen Sie in Rot gekennzeichnet kleine Abweichungen.

01:09:43.610 --> 01:09:50.110
Die beiden Werte der kleinste und der größte Exponent die werden als

01:09:50.110 --> 01:09:51.130
Sonderfälle betrachtet.

01:09:51.310 --> 01:09:54.230
Für die Darstellung von Sonderfällen rausgenommen.

01:09:54.890 --> 01:10:00.490
Das heißt, ich habe nur als gültige Exponenten die Werte minus 126 bis

01:10:00.490 --> 01:10:00.990
127.

01:10:02.630 --> 01:10:07.370
Und meine Mantisse hat eigentlich 23 Bits.

01:10:07.990 --> 01:10:09.670
32 minus 9.

01:10:10.490 --> 01:10:13.870
Plus 1, weil ich ja die 1 immer noch im Sinn habe.

01:10:14.390 --> 01:10:17.870
Um also die Werte darzustellen zwischen 1 und...

01:10:17.870 --> 01:10:19.970
Was ist die größte Mantisse, die ich darstellen kann?

01:10:20.690 --> 01:10:22.890
2 hoch minus 23.

01:10:24.590 --> 01:10:28.450
Ja, das ist der größte Wert der Darstellbarkeit.

01:10:28.570 --> 01:10:30.990
Das wäre also dann nur 1 in der Mantisse.

01:10:31.790 --> 01:10:32.950
Das wäre entsprechend dieser Wert.

01:10:34.510 --> 01:10:36.170
Und damit habe ich eine einfache Genauigkeit.

01:10:36.370 --> 01:10:39.790
Damit weiß ich sofort, wo sind die Wertebereiche für meine Karte.

01:10:40.330 --> 01:10:42.750
Wenn ich von einfacher Genauigkeit rede, kann ich auch von doppelter

01:10:42.750 --> 01:10:43.610
Genauigkeit reden.

01:10:43.710 --> 01:10:48.690
Dann habe ich entsprechend 64 Bits, also zwei Worte der Größe 32 Bits.

01:10:50.370 --> 01:10:53.770
Das ist dann doppelte Genauigkeit oder eben im Rechner, in

01:10:53.770 --> 01:10:56.330
Programmiersprachen auf der Datentyp Double.

01:10:57.070 --> 01:11:01.070
Und hier werden für die Charakteristik 11 Bits spendiert.

01:11:01.930 --> 01:11:08.490
Entsprechend habe ich bei den Exponenten Werte zwischen 1000, minus

01:11:08.490 --> 01:11:13.050
1000, eigentlich 23, bis 1024 wie der kleinste und größte Wert.

01:11:13.290 --> 01:11:14.850
Die werden besonders viel reserviert.

01:11:15.550 --> 01:11:20.010
Und meine Mantisse, also wenn ich nur 1 habe, ist der größte

01:11:20.010 --> 01:11:23.630
darstellbare Mantissenwert 2 minus 2 hoch minus 52.

01:11:23.970 --> 01:11:28.510
Weil ich gerade 52 Bits habe, rechts neben dem Dezimalpunkt.

01:11:30.210 --> 01:11:34.050
Entsprechend meine Werte, die ich hier entsprechend alle darstellen

01:11:34.050 --> 01:11:34.330
kann.

01:11:34.670 --> 01:11:36.510
Und dann gibt es noch die Vierfache Genauigkeit.

01:11:37.290 --> 01:11:38.650
Das Ganze wieder mal 2.

01:11:39.190 --> 01:11:41.690
Ich habe 128 Bits im Prinzip zur Verfügung.

01:11:42.070 --> 01:11:43.730
4 32-Bit-Worte.

01:11:45.210 --> 01:11:48.570
Und hier werden standardmäßig 15 Bits spendiert für die

01:11:48.570 --> 01:11:49.270
Charakteristik.

01:11:49.270 --> 01:11:54.330
Und 112 Bits für die Mantisse.

01:11:54.850 --> 01:11:58.110
Entsprechend habe ich dann Exponenten in einem deutlich größeren

01:11:58.110 --> 01:12:01.810
Bereich von minus 2 hoch 14 bis 2 hoch 14.

01:12:02.370 --> 01:12:07.890
Und die Werte der Mantisse werden entsprechend genauer.

01:12:08.290 --> 01:12:15.110
Wir haben hier 112 signifikante Bits rechts neben dem Dezimalpunkt.

01:12:16.990 --> 01:12:22.430
Können Sie sich überlegen, wenn Sie hier bei dieser Mantisse in

01:12:22.430 --> 01:12:27.930
einfacher Genauigkeit 23 Bits rechts neben dem Dezimalpunkt heißt so

01:12:27.930 --> 01:12:31.310
in etwa 7 Dezimalziffern genau.

01:12:33.070 --> 01:12:37.470
Das heißt in etwa Genauigkeit 7 Stellen hinter dem Komma.

01:12:37.810 --> 01:12:39.090
Hier bei einfacher Genauigkeit.

01:12:39.150 --> 01:12:43.170
Entsprechend bei doppelter und Vierfache Genauigkeit eine höhere

01:12:43.170 --> 01:12:45.370
Genauigkeit für die Darstellung Ihrer Zahlen.

01:12:46.390 --> 01:12:49.290
Und jetzt wissen Sie, welche Zahlen Sie darstellen können.

01:12:49.610 --> 01:12:50.650
Auf diese Art und Weise.

01:12:51.710 --> 01:12:54.570
Dann gibt es natürlich noch die Darstellung der Null.

01:12:55.310 --> 01:12:56.690
Ich muss überlegen, wie mache ich das?

01:12:57.350 --> 01:13:01.710
Und was mache ich mit zu großen oder zu kleinen Zahlen?

01:13:02.750 --> 01:13:04.690
Und dafür gibt es Sonderfälle.

01:13:06.370 --> 01:13:07.870
Sogenannte denormalisierte Zahlen.

01:13:09.110 --> 01:13:11.550
Ich möchte auch sehr kleine Zahlen darstellen können.

01:13:11.930 --> 01:13:16.390
Wenn also die Charakteristik Null ist, interpretiere ich meine

01:13:16.390 --> 01:13:17.430
Mantisse anders.

01:13:18.130 --> 01:13:23.430
Dann interpretiere ich sie nicht als 1 Plus M Strich, sondern einfach

01:13:23.430 --> 01:13:24.930
direkt als M Strich.

01:13:25.690 --> 01:13:30.590
Das heißt, ich betrachte dann auch eine Mantisse Null Punkt B Minus 1

01:13:30.590 --> 01:13:34.490
und so weiter bis B Minus...

01:13:37.800 --> 01:13:41.160
K Bits für die Mantisse.

01:13:42.920 --> 01:13:44.720
Das ist also jetzt meine...

01:13:44.720 --> 01:13:46.360
Das habe ich als eine andere Art dargestellt.

01:13:46.460 --> 01:13:47.880
Das sind denormalisierte Zahlen.

01:13:48.820 --> 01:13:50.480
Da verzichte ich auf die führende 1.

01:13:50.600 --> 01:13:51.740
Das ist ein Sonderfall.

01:13:52.700 --> 01:13:56.060
Das kann ich noch in einem anderen kleinen Bereich darstellen, mit dem

01:13:56.060 --> 01:13:56.520
Rechnen.

01:13:57.360 --> 01:13:59.480
Dann muss ich überlegen, wie ich die Null darstelle.

01:14:01.160 --> 01:14:07.060
Da sage ich einfach, wenn Charakteristik und Mantisse Null sind, dann

01:14:07.060 --> 01:14:11.680
also dieses M Strich Null sind die beiden, dann ist die Zahl, die

01:14:11.680 --> 01:14:12.960
dargestellt wird, eine Null.

01:14:13.740 --> 01:14:14.860
Das wird einfach so definiert.

01:14:15.780 --> 01:14:20.160
Und ich möchte auch zu große Zahlen oder vom Betrag zu große Zahlen

01:14:20.160 --> 01:14:21.000
darstellen können.

01:14:22.180 --> 01:14:25.480
Unendlich wird dargestellt als C ist maximal.

01:14:26.360 --> 01:14:27.980
Also der größtmögliche Exponent.

01:14:29.480 --> 01:14:31.760
Und Mantisse ist Null.

01:14:32.660 --> 01:14:34.900
Das ist der Wert Unendlich.

01:14:36.120 --> 01:14:42.660
Und alles andere, was jetzt nicht abgedeckt war, das sind Zahlen, die

01:14:42.660 --> 01:14:43.640
sind nicht abgedeckt.

01:14:44.380 --> 01:14:46.000
Da sagen wir, das ist not a number.

01:14:47.500 --> 01:14:53.480
Das heißt, diese Zahlen werden als nicht ordnungsgemäß dargestellte

01:14:53.480 --> 01:14:54.920
Zahlen repräsentiert.

01:14:55.740 --> 01:14:59.220
Und solche Zahlen können als Ergebnis von mathematischen Berechnungen

01:14:59.220 --> 01:14:59.840
entstehen.

01:15:01.000 --> 01:15:05.340
Und wenn also solche Werte entdeckt werden, bei denen also C maximal

01:15:05.340 --> 01:15:10.620
ist und das M-Strich unlike Null, dann bekommen sie als Fehlermeldung

01:15:10.620 --> 01:15:11.220
not a number.

01:15:12.640 --> 01:15:15.720
Sie wissen das in Java, wenn Sie mit den Zahlen umgehen, ist das eine

01:15:15.720 --> 01:15:20.380
der nötigen Exceptions, dass Sie Null kriegen oder Plus unendlich,

01:15:20.460 --> 01:15:22.400
Minus unendlich oder not a number.

01:15:23.800 --> 01:15:29.020
Das sind entsprechend diese Darstellungen der Zahlen aufgrund des IEEE

01:15:29.020 --> 01:15:30.100
-Standards 7.5.4.

01:15:30.760 --> 01:15:34.680
Wenn Sie dort genauer nachschauen, dann bekommen Sie auch genaue

01:15:34.680 --> 01:15:39.020
Angaben über die Rechenregeln, die Sie also in der Arithmetik,

01:15:39.100 --> 01:15:45.140
Addition, Modifikation und so weiter erarbeiten können mit solchen

01:15:46.180 --> 01:15:46.740
Ausnahmen.

01:15:48.280 --> 01:15:51.540
Da das definierte Rechenregeln sind, können Sie also definiert

01:15:51.540 --> 01:15:53.340
rechnen, ohne dass Ihr Programm abstürzt.

01:15:53.820 --> 01:15:56.360
Sie müssen nur entsprechend dafür sorgen, dass Sie Ihren Programm

01:15:56.360 --> 01:15:59.980
abchecken, ob dort irgendwo eine Exception, not a number, Null oder

01:15:59.980 --> 01:16:01.720
unendlich gesetzt wird.

01:16:03.180 --> 01:16:06.560
Also das sind diese entsprechenden Standards für die Daten und die

01:16:06.560 --> 01:16:06.860
Zahlen.

01:16:07.020 --> 01:16:10.980
Jetzt schauen wir uns an, was heißt das für die Darstellung dieser

01:16:11.680 --> 01:16:12.200
Zahlenbereiche.

01:16:12.340 --> 01:16:12.580
Naja.

01:16:13.820 --> 01:16:15.820
Welche Werte kann ich jetzt eigentlich darstellen?

01:16:20.170 --> 01:16:25.590
Ich beschränke mich jetzt auf die positiven Zahlen und ich habe eine R

01:16:25.590 --> 01:16:28.010
-Bit -Mantisse, eine S-Bit-Charakteristik.

01:16:29.690 --> 01:16:32.870
Dann kann ich die Zahlen natürlich unterschiedlich darstellen.

01:16:32.950 --> 01:16:34.490
Jetzt habe ich hier Mantisse.

01:16:35.290 --> 01:16:36.910
Das ist immer das Gleiche, was hier steht.

01:16:37.030 --> 01:16:39.550
Also was hier steht, ist in dem Bereich das Gleiche, wie das, was da

01:16:39.550 --> 01:16:39.890
steht.

01:16:40.010 --> 01:16:41.490
Auch das Gleiche, wie das, was da steht.

01:16:43.290 --> 01:16:46.450
Und auf der rechten Seite steht jeweils die Charakteristik.

01:16:47.150 --> 01:16:50.450
Das sind alle Werte, die ich hier zulassen kann.

01:16:51.430 --> 01:16:57.190
Also Charakteristik 1 bis Charakteristik 1 kleiner als die maximale

01:16:57.190 --> 01:16:57.950
Charakteristik.

01:16:58.730 --> 01:17:02.510
Das sind die Werte, die wir normal darstellen können.

01:17:03.690 --> 01:17:07.450
Wenn ich also die kleinstnötige Charakteristik mir anschaue, der Wert

01:17:07.450 --> 01:17:10.850
1, der ist also Minus Q im Prinzip.

01:17:12.190 --> 01:17:13.090
Minus Q für 1.

01:17:15.850 --> 01:17:20.570
Dann habe ich eine ziemlich kleine Zahl dargestellt.

01:17:22.390 --> 01:17:25.850
Also ich habe einen kleinen Exponent, 2 hoch Minus irgendwas.

01:17:27.830 --> 01:17:32.210
Und das heißt, ich betrachte hier irgendwelche Zahlen, die liegen sehr

01:17:32.210 --> 01:17:33.590
eng nebeneinander.

01:17:34.830 --> 01:17:36.690
Wie kann ich das differenzieren von

01:17:40.850 --> 01:17:47.910
zwischen 1 und 2 Minus 2 hoch Minus 23 zum Beispiel.

01:17:49.450 --> 01:17:51.670
Und dann schaue ich mir den nächsten Bereich an.

01:17:53.330 --> 01:17:54.330
Geht immer so weiter.

01:17:55.950 --> 01:18:00.070
Und ich habe also hier andere Zahlenbereiche, andere Bereiche, also

01:18:00.070 --> 01:18:01.150
bis K0 zum Beispiel.

01:18:02.370 --> 01:18:05.270
Das ist aber so, dass die Abstände zwischen den einzelnen Zahlen

01:18:05.270 --> 01:18:06.290
natürlich immer größer werden.

01:18:06.350 --> 01:18:11.610
Wenn ich hier hinten mir das betrachte, einen großen Exponenten, habe

01:18:11.610 --> 01:18:18.810
ich aber die gleiche Anzahl von Mantissen, die ich verwenden kann, um

01:18:19.930 --> 01:18:24.130
diesen Exponenten hier irgendwie zu modifizieren.

01:18:24.230 --> 01:18:28.410
Das heißt, ich habe jetzt Werte, die liegen sehr weit auseinander, die

01:18:28.410 --> 01:18:29.090
ich darstellen kann.

01:18:29.190 --> 01:18:33.050
Hier oben liegen sie sehr eng zusammen, hier ein bisschen weiter

01:18:33.050 --> 01:18:35.470
auseinander und hier hinten liegen sie ganz weit auseinander.

01:18:35.610 --> 01:18:38.330
Das heißt, alles, was dazwischen liegt, kann ich natürlich nicht

01:18:38.330 --> 01:18:38.710
darstellen.

01:18:41.010 --> 01:18:45.950
Das heißt, ich habe hier eine wachsende Ungenauigkeit, wachsend mit

01:18:45.950 --> 01:18:48.390
dem Exponenten oder wachsend mit der Charakteristik.

01:18:50.170 --> 01:18:53.830
Und dieser Darstellungsfehler wächst mit der Größe des Exponenten und

01:18:53.830 --> 01:18:58.090
diese Fehler sind einfach inherent mit der Darstellung von reellen

01:18:58.090 --> 01:18:58.910
Zahlen verbunden.

01:19:00.730 --> 01:19:03.190
Sonderfälle hatte ich schon gesagt, da habe ich halt gerade hier dann

01:19:03.190 --> 01:19:03.870
diesen Bereich.

01:19:04.170 --> 01:19:15.210
Ich habe bei den Sonderfällen Mantisse von 0 bis entsprechend ähm

01:19:18.420 --> 01:19:23.580
klar hier Mantisse von 0 bis 0.111 und hier wieder die gleichen

01:19:23.580 --> 01:19:26.780
Mantissen, nur das erste Bit ist jetzt eine 0 und nicht eine 1.

01:19:27.560 --> 01:19:30.400
Hier ist bei der anderen Tabelle immer eine 1.

01:19:31.380 --> 01:19:36.920
Bei der Charakteristik habe ich in diesem Fall also Werte von 0.

01:19:37.020 --> 01:19:40.100
In dem Fall durfte ich eben das Rot darstellen.

01:19:41.180 --> 01:19:48.540
In den Sonderfällen entsprechend die Zahl UNENDLICH ist halt Mantisse

01:19:48.540 --> 01:19:53.740
ist 0 das Elfstrich ist 0 und Charakteristik hat den maximalen Wert,

01:19:53.880 --> 01:19:58.620
dann habe ich hier den Sonderfall UNENDLICH und alle anderen Werte

01:19:58.620 --> 01:20:00.000
sind halt diese Note nach.

01:20:02.040 --> 01:20:04.180
Und jetzt schauen wir uns nochmal an, hier halt mit der

01:20:04.180 --> 01:20:06.320
Gleitpunktdarstellung, das wissen wir ja schon wie das geht.

01:20:07.040 --> 01:20:11.120
Hatte ich eben schon ein paar Folien vorher dargestellt, wie man

01:20:11.120 --> 01:20:14.720
Gleitpunktzahlen addieren kann, genau die Operation müssen wir jetzt

01:20:14.720 --> 01:20:15.040
machen.

01:20:16.300 --> 01:20:18.200
Das Problem ist natürlich, jetzt müssen wir uns mit diesen

01:20:20.120 --> 01:20:20.920
Fehlergeschichten rumschlagen.

01:20:21.440 --> 01:20:26.000
Also wenn ich jetzt 2 Mantissen angleiche, kann es sein, dass so etwas

01:20:26.000 --> 01:20:30.460
passiert, kann aber auch sein, dass ich 2 Mantissen addieren muss, die

01:20:30.460 --> 01:20:31.620
so weit auseinander liegen.

01:20:34.140 --> 01:20:35.660
Ja, welche Werte nehme ich denn dann?

01:20:35.720 --> 01:20:38.580
Ich habe ja nur so viele Bits zur Verfügung, um die Zahl darzustellen.

01:20:39.740 --> 01:20:41.760
Was sind denn dann die richtigen Bits?

01:20:42.800 --> 01:20:47.360
Ist offensichtlich nicht einfach, das werde ich also einige Dinge mir

01:20:47.360 --> 01:20:48.300
genauer angucken müssen.

01:20:49.620 --> 01:20:53.680
Ich habe eventuell Überläufe von Exponenten, wenn ich also große

01:20:53.680 --> 01:20:59.620
Zahlen multipliziere, zum Beispiel 1,9 mal 10 hoch 25,

01:21:03.300 --> 01:21:09.400
das quadriere, kommt ein Exponent raus, der ist 10 hoch 50, Exponent

01:21:09.400 --> 01:21:13.800
50, das heißt, die 50 kann ich nicht einfach lang darstellen, die Zahl

01:21:13.800 --> 01:21:15.540
ist nicht darstellbar, ich bin rausgelaufen.

01:21:16.100 --> 01:21:19.040
Da muss dann entsprechend was Sinnvolles rauskommen, damit muss ich

01:21:19.040 --> 01:21:21.960
umgehen können, das gibt dann halt entsprechend Notename da in dem

01:21:21.960 --> 01:21:22.220
Fall.

01:21:22.860 --> 01:21:26.920
Unterlauf muss ich mir auch angucken können, was passiert, wenn ich so

01:21:26.920 --> 01:21:33.600
analog Zahlen 10 hoch minus 25, wenn ich sowas entsprechend

01:21:35.620 --> 01:21:39.280
multipliziere, kommt irgendwas raus mit 10 hoch minus 50, auch das

01:21:39.280 --> 01:21:41.380
kann ich nicht einfach lang darstellen, habe ich ein Problem.

01:21:42.460 --> 01:21:46.500
Und ich muss aufpassen bei der Addition unterschiedlich großer Zahlen,

01:21:46.680 --> 01:21:49.500
bei der Subtraktion gleich großer Zahlen, ich gebe Ihnen mal ein

01:21:49.500 --> 01:21:50.260
kleines Beispiel.

01:21:51.760 --> 01:21:57.880
Wir haben folgende Operation, in Ihrem Programm steht an der Stelle

01:21:57.880 --> 01:22:06.340
vermutlich irgendein x mal irgendwie y

01:22:10.760 --> 01:22:17.220
plus a minus b.

01:22:20.210 --> 01:22:22.810
Also x mal y plus a minus b.

01:22:23.130 --> 01:22:23.870
Das steht in Ihrem Programm.

01:22:25.190 --> 01:22:26.570
Jetzt passiert folgendes.

01:22:27.590 --> 01:22:35.130
Vielleicht haben Sie das noch so hingeschrieben, x mal y plus a minus

01:22:35.130 --> 01:22:35.650
b.

01:22:37.870 --> 01:22:40.770
Arithmetisch, Addition ist ja assoziativ, völlig egal, welche

01:22:40.770 --> 01:22:42.470
Reihenfolge mit Operation ausfällt.

01:22:43.950 --> 01:22:45.290
Jetzt schauen wir uns das genauer an.

01:22:45.470 --> 01:22:48.330
Die konkreten Werte könnten ja so sein, wie hier angegeben.

01:22:48.850 --> 01:22:54.070
Das x hat den Wert 10 hoch 23, das y den Wert 10 hoch minus 9 und a

01:22:54.070 --> 01:22:55.390
und b sind gerade gleich 1.

01:22:57.710 --> 01:23:02.850
Und jetzt mache ich Addition von links nach rechts.

01:23:03.910 --> 01:23:09.830
Der ist 10 hoch minus 9 plus 1 und ich ziehe davon 1 ab.

01:23:11.850 --> 01:23:19.730
Na ja, 10 hoch minus 9 plus 1 als einfach lange reelle Zahl

01:23:19.730 --> 01:23:24.530
dargestellt oder real Zahl dargestellt liefert den Wert 1.

01:23:26.090 --> 01:23:30.530
Also das wird falsch dargestellt als 1.

01:23:32.710 --> 01:23:36.310
Weil ich das 10 hoch minus 9 gar nicht darstellen kann.

01:23:36.410 --> 01:23:39.290
Das ist so ein Fall, dass die Bits einfach wegfallen.

01:23:39.410 --> 01:23:40.830
Ich gucke mir nur das an, was hier vorne steht.

01:23:41.530 --> 01:23:44.010
Das, was da hinten steht, wird nicht berücksichtigt.

01:23:44.850 --> 01:23:49.310
Das heißt, dann steht hier 1 minus 1, das ist 0, liefert den Wert 0.

01:23:51.190 --> 01:23:55.850
Wenn ich aber andersrum hier rechne, und ich rechne erst 1 minus 1,

01:23:56.110 --> 01:23:56.850
dann steht dort 0.

01:23:58.330 --> 01:24:02.530
Dann steht als Summe in diesem Ausdruck 10 hoch minus 9 plus 0, das

01:24:02.530 --> 01:24:03.430
ist 10 hoch minus 9.

01:24:04.270 --> 01:24:06.570
Und ich qualifiziere das mit 10 hoch 23.

01:24:07.450 --> 01:24:10.550
Dann gibt das 10 hoch 14.

01:24:14.000 --> 01:24:19.380
Und wir sehen, dass wir auf einmal einen Wert bekommen, je nachdem,

01:24:19.520 --> 01:24:22.600
wie wir in welcher Reihenfolge diese Operation ausführen.

01:24:22.600 --> 01:24:25.000
Der eine Wert ist 0, der andere ist 10 hoch 14.

01:24:26.300 --> 01:24:29.920
Das heißt, wir haben riesige Unterschiede in den Werten, einfach

01:24:29.920 --> 01:24:34.480
dadurch, dass wir bei der Addition von Zahlen eben einige Bits

01:24:34.480 --> 01:24:35.040
abschneiden.

01:24:35.100 --> 01:24:38.440
Das kann sich wenig auswirken, kann sich aber auch ganz drastisch

01:24:38.440 --> 01:24:39.680
auswirken, wie in diesem Beispiel.

01:24:41.200 --> 01:24:45.860
Und wenn Sie nicht aufpassen, bei der Formulierung Ihrer Programme,

01:24:46.660 --> 01:24:51.080
und Sie schreiben einfach etwas auf diese Art und Weise hin, oder auch

01:24:51.080 --> 01:24:55.600
auf die Art und Weise, und Sie haben hier ungünstige Kombinationen von

01:24:55.600 --> 01:25:01.160
Zahlenwerten, dann bekommen Sie völlig andere Werte, als es der

01:25:01.160 --> 01:25:02.080
Realität entspricht.

01:25:03.520 --> 01:25:07.000
Deswegen können Sie bei EL-Berechnungen eventuell völlig unsinn

01:25:07.000 --> 01:25:07.520
aufgehen.

01:25:08.600 --> 01:25:11.460
Wenn Werte rauskommen, die haben mit den eigentlichen numerischen

01:25:11.460 --> 01:25:12.480
Werten nichts zu tun.

01:25:13.520 --> 01:25:14.340
Das müssen Sie wissen.

01:25:15.180 --> 01:25:20.160
Dass Sie sich auf die Berechnungen, die auf EL-Zahlen radieren, nie

01:25:20.160 --> 01:25:20.580
verlassen.

01:25:22.240 --> 01:25:26.460
Es sei denn, man hat bei der Implementierung dieser Operationen auf EL

01:25:26.460 --> 01:25:30.600
-Zahlen darauf geachtet, dass solche Fälle entsprechend abgedeckt

01:25:30.600 --> 01:25:30.880
sind.

01:25:32.620 --> 01:25:35.740
Sie sehen, dass das Berechnen mit EL-Zahlen offensichtlich etwas ist,

01:25:35.800 --> 01:25:37.460
was einem Rechner schwierig ist.

01:25:38.960 --> 01:25:41.600
Sie können natürlich einfach da hinschreiben, ich deklariere einfach

01:25:41.600 --> 01:25:43.520
meine Zahlen als Real-Werte, das ist doch ganz einfach.

01:25:43.920 --> 01:25:46.420
Nur, dass das Wertebild rauskommt, ist völlig unzuverlässig.

01:25:47.840 --> 01:25:51.900
Es sei denn, Sie haben genaue Abschätzungen über die Größenordnung der

01:25:51.900 --> 01:25:54.840
Werte, die dort rauskommen, über die entsprechenden Fehler, die

01:25:54.840 --> 01:25:55.320
auftreten.

01:25:55.860 --> 01:26:00.100
Also, die Ergebnisse von Gleichpunktberechnungen können erheblich

01:26:00.100 --> 01:26:01.460
abweichen vom exakten Wert.

01:26:02.160 --> 01:26:04.560
Die Rechengesetze gelten nicht, die sichererweise gelten.

01:26:05.220 --> 01:26:11.480
Und deswegen können Sie bei EL-wertigen Berechnungen eventuell

01:26:11.480 --> 01:26:12.800
drastische Fehler machen.

01:26:12.800 --> 01:26:18.840
Es gibt zig Beispiele von technischen Problemen, die aufgetreten sind

01:26:18.840 --> 01:26:20.660
aufgrund solcher fehlerhafter Berechnungen.

01:26:21.420 --> 01:26:23.720
Weil man eben darauf nicht geeignet beachtet.

01:26:25.940 --> 01:26:29.060
Dann nochmal zu der Null.

01:26:29.900 --> 01:26:34.200
Da hätte ich schon darauf hingewiesen, exaktes Ergebnis Null wird in

01:26:34.200 --> 01:26:38.320
der Regel nicht angenommen, sondern ich bin immer irgendwo in der

01:26:38.320 --> 01:26:38.680
Nähe.

01:26:39.760 --> 01:26:43.280
Ich darf also niemals irgendwie abfragen, ob ein Wert gleich Null ist,

01:26:43.380 --> 01:26:45.820
sondern kann abfragen, ob der Wert kleiner als Y ist.

01:26:46.360 --> 01:26:49.760
Genauso würde ich eben nicht X minus Y gleich Null abfragen, sondern

01:26:49.760 --> 01:26:54.900
ob X minus Y kleiner als irgendein kleiner Wert ist.

01:26:55.800 --> 01:26:58.020
Nur auf diese Art und Weise kann ich damit umgehen.

01:26:58.120 --> 01:27:00.860
Ich kann nicht auf Gleichheit fest und bei der hellen Zahl.

01:27:01.480 --> 01:27:06.280
Macht keinen Sinn, weil Sie dort unsinnige Ergebnisse bekommen.

01:27:07.720 --> 01:27:10.780
Und da hatte ich schon darauf hingewiesen, dass man Probleme bekommt,

01:27:10.960 --> 01:27:14.100
wenn man nicht darauf achtet, auf die Fehlerquellen.

01:27:14.600 --> 01:27:16.840
Man kann anders arbeiten.

01:27:16.960 --> 01:27:23.620
Man kann sagen, naja, ich weiß ja, wenn ich einen Wert X habe, der

01:27:23.620 --> 01:27:30.760
kann liegen zwischen X minus Y und X plus Y.

01:27:31.600 --> 01:27:36.880
Das heißt, ich habe hier nicht einen Wert, sondern ein gewisses

01:27:37.680 --> 01:27:39.940
Intervall, in dem meine Zahl liegt.

01:27:41.380 --> 01:27:49.480
Ich muss also nicht X ob Y rechnen, sondern ich schreibe einfach hin

01:27:49.480 --> 01:27:52.900
IX ob IY.

01:27:53.660 --> 01:27:57.720
Der Intervall von X geeignet verknüpft mit dem Intervall von Y.

01:27:58.460 --> 01:28:01.320
Und dann bekomme ich raus, in welchem Intervall mein Ergebnis liegen

01:28:01.320 --> 01:28:01.620
kann.

01:28:02.520 --> 01:28:03.440
Das ist X-Akte.

01:28:05.260 --> 01:28:09.700
Da kann man also X-Akte-Werte bekommen für das, was rauskommt.

01:28:11.000 --> 01:28:14.140
Da kommt dann heraus, dass der Wert, den man hat, eine riesige

01:28:14.140 --> 01:28:14.920
Unsicherheit hat.

01:28:15.560 --> 01:28:16.680
Aber dann weiß ich das.

01:28:17.100 --> 01:28:18.020
Dann kann ich damit umgehen.

01:28:19.120 --> 01:28:20.480
Solche Dinge sind möglich.

01:28:21.020 --> 01:28:26.000
Es gibt also entsprechende Bibliotheken, es gibt auch Ideen für

01:28:26.000 --> 01:28:32.080
Rechner, also für Prozessoren, solche Dinge konkret mit den Hardwaren

01:28:32.080 --> 01:28:32.760
umzusetzen.

01:28:33.180 --> 01:28:37.140
Dann kann ich genaue Aussagen über die Genauigkeit der Ergebnisse

01:28:37.140 --> 01:28:37.500
machen.

01:28:38.240 --> 01:28:40.420
Es gibt Erweiterungen von Programmiersprachen dafür.

01:28:40.920 --> 01:28:43.580
XSC, also X-Werk Scientific Computation.

01:28:44.300 --> 01:28:46.760
Dafür gibt es entsprechende Bibliotheken, wo die Ausführung der

01:28:46.760 --> 01:28:50.660
Operationen dauert dann deutlich länger, weil ich eben auf einmal auf

01:28:50.660 --> 01:28:53.220
Intervallen rechnen muss und das ist aufwendiger, als wenn ich einfach

01:28:53.220 --> 01:28:54.580
die Zahlen...

01:28:56.160 --> 01:28:59.400
Das war im Prinzip das, was ich in diesem Kapitel vorstellen wollte.

01:28:59.400 --> 01:29:02.920
Es gibt hier noch ein Kapitel, ein Abschnitt untendran, Kodierung zur

01:29:02.920 --> 01:29:03.860
Geheimhaltung.

01:29:04.860 --> 01:29:09.080
Diesen Abschnitt füge ich an, der wird aber... ist jetzt also nicht

01:29:09.080 --> 01:29:13.940
klausurrelevant und wird auch von mir nicht vorgetragen.

01:29:14.040 --> 01:29:15.740
Ich füge ihn einfach dazu, lesen Sie sich das durch.

01:29:16.360 --> 01:29:21.420
Ich habe dazu auch unter den bereitgestellten Materialien auch ein

01:29:21.420 --> 01:29:23.420
Modul, wo Sie sich da noch mehr angucken können.

01:29:24.120 --> 01:29:26.820
Ich finde, das ist einfach ein Thema, das auch was mit Kodierung von

01:29:26.820 --> 01:29:31.200
Informationen zu tun hat, aber geht leider über den Stoff dieser

01:29:31.200 --> 01:29:32.020
Vorlesung hinaus.

01:29:32.500 --> 01:29:36.160
Ein paar Seiten habe ich dazu hinzugefügt, wo es eben darum geht, dass

01:29:36.160 --> 01:29:39.380
man so zeigt, wie man Zahlen kodieren kann und so weiter.

01:29:40.320 --> 01:29:42.900
Wie gesagt, das zeige ich Ihnen nicht in der Vorlesung.

01:29:43.180 --> 01:29:44.400
Mittwoch früh sehen wir uns wieder.

01:29:44.980 --> 01:29:46.740
Da geht es dann um Rechner-Architektur.

01:29:46.920 --> 01:29:47.320
Vielen Dank.

