🔍
Floating Point Numbers - Computerphile - YouTube
Channel: Computerphile
[0]
Wir erwarten, dass Computer vollkommen präzise mit Zahlen umgehen.
[4]
Du kennst das, du wächst mit Taschenrechnern auf, du erwartest, dass wenn du
[7]
0,1 + 0,2 eintippst 0,3 herauskommt.
[12]
Und früher oder später probiert das jeder Programmierer beim Lernen aus.
[15]
Und er schreibt es in einer Programmiersprache.
[19]
Etwas wie "0.1 + 0.2", und dann drückt er Enter.
[24]
Der Computer gibt ihm daraufhin etwas wie 0.30000000000...1 zurück
[30]
Und genau dann muss der Programmierer etwas über Gleitkommazahlen lernen
[34]
und wird sich dabei die Haare ausreißen.
[39]
Gleitkommazahlen sind im Grunde wissenschaftliche Schreibweise.
[43]
Für die Uneingeweihten, stellt euch vor, Ihr seid Astrophysiker und
[47]
habt die Lichtgeschwindigkeit,
[49]
eine gigantische Zahl mit acht Nullen.
[54]
Und jetzt möchtest du sie mit einer winzigen Entfernung multiplizieren
[56]
Es ist nicht wirklich wichtig, was hier gemessen wird, es geht nur darum, dass es eine große und eine kleine Zahl gibt.
[59]
Sagen wir mal 0,00000015.
[64]
Lass uns diese Zahlen miteinander multiplizieren, ich habe uns es extra ein bisschen einfacher gemacht.
[68]
Man könnte versuchen, es umständlich und kompliziert zu berechnen, und es irgendwie herausbekommen,
[72]
aber das muss man nicht. Weil in dieser wissenschaftlichen Schreibweise
[75]
ist das 3 mal 10 hoch 8
[79]
und das hier ist 1,5 mal 10 hoch -7.
[83]
Man muss also nichts wirklich komliziertes machen, um diese beiden miteinander zu multiplizieren.
[87]
Du musst nur diese Zahlen hier multiplizieren, was 4,5 ergibt
[91]
und diese Exponenten addieren.
[95]
8 und - 7 ergeben zusammen 1,
[100]
also haben wir 4,5 mal 10 hoch 1, oder 4,5 mal 10, oder 45.
[106]
Brillant! Das ist viel einfacher als mit den großen Zahlen zu arbeiten.
[111]
Und es ist eine Überleitung zu dem Prinzip der bedeutungsvollen Zahlen,
[114]
da die Lichtgeschwindigkeit nicht genau 3 mal 10 hoch 8 beträgt, sondern
[118]
2,997 irgendwas, da sind sehr viele Ziffern in dieser Zahl,
[124]
die für alltägliche Berechnungen nicht von Bedeutung sind.
[127]
Wir runden sie auf. Wir sagen, dass sie 3 mal 10 hoch 8 ist.
[130]
Oder vielleicht, um genauer zu sein, sagen wir 2.997 mal 10 hoch 3
[135]
aber die Zahlen danach interessieren uns nicht.
[138]
Merk dir das. Wir reden später noch einmal darüber.
[141]
Die zwei Hauptvorteile des Gleitkommas sind Geschwindigkeit und Effizienz.
[145]
Geschwindigkeit, weil das Gleitkomma über viele Jahre entwickelt wurde
[148]
und heute Computer super schnell damit umgehen können.
[152]
Und Effizienz, weil es mit sehr, sehr großen Zahlen,
[155]
gigantischen Zahlen, "Größe des Universums" Zahlen,
[158]
und winzigen Zahlen, "Größe eines Atoms" Zahlen,
[161]
ohne viel Platz zu benötigen, umgehen kann.
[164]
Wenn du ein Format hättest, das sowohl die Größe des Universums
[168]
als auch die Größe eines Atoms umfassen müsste, müsstest du so viele Nullen an beiden Enden speichern,
[174]
oder man bräuchte etwas für den Computer besonders kompliziert zu Lösendes,
[178]
was entweder sehr ineffizient ist, eine Zahl als Megabyte speichern,
[183]
oder du bräuchtest etwas, was sehr knifflig für den Computer wäre,
[187]
wenn er versucht die Zahlen und Nullen überall zu setzen.
[190]
Lass uns über die Basis 10 reden. Lass uns über uns reden - Menschen.
[193]
Lass uns darüber reden, dass plötzlich die Lichter an sind. Das ist merkwürdig.
[197]
Im Dezimalsystem, unseren normalen, menschlichen Zahlensystem,
[201]
also zehn Zahlen - Basis 10,
[204]
haben wir Hunderter, Zehner und Einser. Das lernst du in der Grundschule.
[207]
Und hier hast du Zehntel, Hundertstel und Tausendstel.
[213]
Also wenn du "Ein Zehntel" dezimal ausdrückst, ist es 0,1.
[219]
Und das ist normal und natürlich.
[221]
Basis 2, auf der anderen Seite, das Binärsystem, Computer, verhalten sich nicht so.
[225]
Sie sehen vieren, zweien und Einser.
[228]
und hier Hälften, Viertel, Achtel und Sechzehntel.
[232]
Es gibt keine 0,1.
[235]
Tatsächlich ist 0,1 im Binären "0,00011" und diese "0011" wiederholen sich periodisch.
[244]
Eigentlich ist 0,1 0,00011001100110011 bis ins Unendliche.
[251]
Das ist sehr interessant, da die 32 Bit Computer,
[255]
die wir normalerweise benutzen (Wir haben jetzt ein paar Fortschritte gemacht),
[257]
nur 32 signifikante Stellen speichern.
[263]
Sie speichern auch die Position des Dezimaltrennzeichen.
[265]
Im Grunde führen sie die wissenschaftlich Schreibweise in Basis 2 aus. Das ist was eine Gleitkommazahl ist.
[270]
Sie sagen, "Okay, wir haben diese sehr lange binäre Zahl
[274]
mal 2 hoch irgendwas."
[278]
Und da liegt das Problem. Denn was es verliert ist Genauigkeit,
[280]
es versteht keine Wiederholung.
[283]
Es gibt eine Analogie für das Dezimalsystem:
[286]
Wenn du ein Drittel als Dezimalzahl schreibst, schreibst du
[289]
Hunderter, Zehner, Einser, Zehntel Hundertstel, Tausendstel,
[295]
und dann versuchen wir das zu schreiben und haben 0.33333333... das sich wiederholt.
[303]
Nun stell dir vor, dass du keine sich wiederholenden Zahlen verstehst, wie ein Computer,
[306]
wie die wissenschaftliche Notation, wenn du die Wiederholung wegnimmst,
[309]
wie es die Gleitkomma-Rechenart nicht tut.
[312]
Hier führen wir alle Stränge zusammen.
[314]
Wenn du im Dezimalsystem bist, sagen wir, du hast 1/3 + 1/3 +1/3,
[323]
denkst du als Mensch "Naja, das ist 0.3 Periode + 0.3 Periode
[328]
+ 0.3 Periode, und das zusammmen ergibt 1.
[330]
Aber wenn du ein Computer bist, der keine Wiederholung versteht,
[334]
weil Gleitkommamathematik im Grunde den Signifikanten Zahlen entsprechen.
[338]
Also ein Computer würde sich das anschauen und sagen: "0.33333333333....
[344]
+ 0.333333... + 0.333..." Der Computer würde also sagen:
[347]
"Also, 1/3 + 1/3 + 1/3 ist insgesamt 0.9999999999999..."
[353]
Nach einer Weile hört er auf, weil er keine Stellen mehr übrig hat.
[357]
Dies ist ein Gleitkomma- Rundungsfehler.
[362]
Lass uns mal mit dem Binärsystem rechnen. 1/10 + 2/10.
[367]
Das ist 0.00011001100110011... Oh! Es sind keine Stellen mehr übrig.
[374]
Weil Gleitkommarechnung auf einem 32-Bit Computer nur 23 Stellen speichert.
[380]
Und dann versuchst du 2/10 zu addieren, also 0.001100110011...
[389]
Ich werde nicht versuchen, das auszurechnen, das würde ewig dauern,
[392]
aber es passiert das Gleiche, wie das, was hier passiert.
[396]
Nach 23 Stellen in einem 32-bit Rechner (Ich denke, dass es 56 in einem 64bit-Computer sind)
[401]
wird es abgeschnitten. Es versteht keine Periode,
[404]
was bedeutet, dass das Gleitkomma sich die 1/10 + 2/10 anschaut, die du gerade eingegeben hast,
[409]
also 0,1 + 0,2 dezimal ausgedrückt, und meint, dass 1/ 10 + 2/10
[415]
nicht genau 3/10 ergeben.
[419]
Nach seiner Denkweise ist das nämlich nicht das Ergebnis.
[423]
In fast allen Fällen ist es nah genug dran,
[426]
in den meisten Fällen braucht man nicht mehr Präzision als 23 binäre Stellen.
[430]
Und falls doch, nimmt man einen 64-Bit Computer.
[433]
Wenn du ein 3D-Spiel programmierst und du wissen musst, wohin du mit etwas auf den Bildschirm zeigen musst,
[437]
ist es egal, ob es 1/100000 eines Pixels abweicht,
[442]
weil es immer noch an der richtigen Stelle ist.
[444]
Und wenn du große Berechnungen durchführst, ist es egal, ob ein winzig kleiner Bruch
[448]
-kleiner als ein Molekül- abweicht,
[451]
weil es mehr oder weniger richtig aussieht,
[453]
besser, als womit die richtige Welt umgehen könnte.
[459]
Aber wenn du mit Währungen rechnest, und du
[462]
10 Pence oder 0,1 Pfund zu 20 Pence addierst, jeder Programmierer muss so etwas irgendwann mal machen,
[470]
lösen wir es so. Das ist einfach.
[472]
Ein Computer würde aber sagen: " Es sind aber eigentlich ... so viele Pence."
[478]
Un in diesen menschlichen Angelegenheiten fällt uns dieser Fehler auf,
[482]
weil er uns plötzlich sehr offensichtlich scheint.
[487]
Das ist das Problem mit dem Gleitkomma. Wenn du mit Währungen umgehst, könntest du das Problem lösen, mal nebenbei gesagt,
[490]
indem du Dezimalzahlen in weiter fortgeschrittenen Programmiersprachen benutzt
[493]
oder einfach alles als Ganzzahl, also Pennys, Cents etc. speicherst
[498]
und am Ende durch Hundert teilst.
[500]
Das Gleitkomma verwirrt viele Menschen.
[504]
Du bekommst es schwer in deinen Kopf bis du verstehst, dass es nur wissenschaftliche Schreibweise ist.
[508]
Es entspricht dem, was wir im Mathematikunterricht gelernt haben, nur im Binärsystem.
[513]
Es sind Hälften und Viertel und Achtel,
[516]
und wenn du einmal verstanden hast, das es eine festgelegte Länge von Zahlen speichert
[521]
und dann herausfindet wo, das Komma ist und es nur signifikante Zahlen gibt,
[526]
wird es viel einfacher. Und du beginnst zu verstehen:
[529]
"Oh, darum ist, wenn ich 0.1 + 0.2 eintippe das Ergebnis nicht 0.3
Most Recent Videos:
You can go back to the homepage right here: Homepage





