Der heutige Beitrag bleibt in der Rubrik “Wie funktionieren Computer” und soll ein wenig mit dem (Vor-)Urteil aufräumen, dass Computer besser als Menschen rechnen. Dass sie schneller sind, ist unbestreitbar – kein Rechenkünstler der Welt wird mehrere Millionen Berechnungen in der Sekunde schaffen. Aber wie sieht es mit der Genauigkeit aus, insbesondere im Bereich der reellen Zahlen?

Eins vorweg: Computer können in der Theorie natürlich so beliebig genau rechnen, wie sie wollen (und wie es ihr Speicher zulässt – die Zahl Pi wird vermutlich in keinen Computer der Welt passen). Allerdings erfordert das zusätzlichen Aufwand, der mit steigender Genauigkeit immer größer wird und damit natürlich immer mehr Zeit verbraucht. In modernen Computern kommt daher ein standardisiertes Verfahren zur Berechnung zur Anwendung, welches auf einer festen Bitkettenlänge beruht. Stehen für eine Zahl etwa 32 Bit zur Verfügung, so können damit insgesamt 232, also 4294967296 (rund 4 Milliarden) Zahlen dargestellt werden. Bei 64 Bit sind es dann schon gewaltige 18446744073709551616 (mehr als 18 Trillionen) Zahlen. Hält man sich hier nur im Bereich der natürlichen oder ganzen Zahlen auf, gibt es kein Problem, da jede der Zahlen im Wertebereich eindeutig dargestellt werden kann. Nach der 1 kommt nun einmal die 2, dazwischen ist nichts. Auch das Rechnen ist relativ einfach, wie wir hier und hier schon gesehen haben.

Bisher habe ich allerdings verschwiegen, wie am Computer all das dargestellt wird, was außerhalb des Wertebereichs der ganzen Zahlen liegt; konkret: die reellen Zahlen. Wer sich nicht mehr ganz erinnert: reelle Zahlen umfassen praktisch alles, was wir so im Alltagsgebrauch an Zahlen benutzen, angefangen von den natürlichen und ganzen Zahlen über die rationalen Zahlen (all die Zahlen, die als Verhältnis zweier ganzer Zahlen darstellbar sind) bis hin zu den irrationalen Zahlen (wozu auch Pi und e zählen). Da die reellen Zahlen in der modernen Mathematik unabdingbar sind und ein Großteil der Probleme, die mit Computern gelöst werden, auf diesem Zahlenbereich basieren, müssen sie natürlich auch effektiv im Rechner dargestellt werden können. Da wir bei der Darstellung auf Bitketten angewiesen sind, die nur aus 0en und 1en bestehen können, fällt die in der Mathematik übliche Darstellung der Zahlen mit einem Trennzeichen weg, es ist also ein anderes Verfahren notwendig. Bevor es jetzt gleich in die Details geht, noch eine Anmerkung: im deutschsprachigen Raum ist das Komma als (Dezimal-)Trennzeichen in reellen Zahlen üblich – im englischsprachigen Raum dagegen der Punkt. Da in der Informatik üblicherweise ein Punkt als Trennzeichen benutzt wird, halte ich mich auch hier daran; die Zahl “1.5” ist also für deutsche Augen zu lesen als “Eins Komma Fünf” – dennoch werde ich von einem “Komma” sprechen und nur bei der Darstellung den Punkt verwenden.

Das einfachste Verfahren zur Darstellung von reellen Zahlen durch Bitketten ist, ein Komma an einer bestimmten Stelle der Bitkette implizit anzunehmen, ohne es explizit hinschreiben zu müssen. Da das (gedachte) Komma hier an einer festen Stelle ist, spricht man auch von Festkommazahlen; die Bits vor der gedachten Kommastelle codieren hierbei entsprechend den Vorkommaanteil der Zahl, die Bits hinter der gedachten Kommastelle entsprechend den Nachkommaanteil. Die Umrechnung einer Bitkette in eine Festkommazahl ist relativ trivial: dazu wird die Bitkette zuerst als ganze Zahl interpretiert und dann durch den Wert 2f geteilt, wobei f die Anzahl der Bits hinter der gedachten Kommaposition bezeichnet. Ein Beispiel: angenommen, wir haben Bitketten der Länge 4, deren gedachte Kommaposition genau in der Mitte liegt; f wäre mithin 2, 22 also 4. Haben wir nun die Bitkette 1010 (mit Komma: 10.10) so stellt sie die in der Dezimaldarstellung die Zahl 10 dar (nämlich 1*8 + 0*4 + 1*2 + 0*1); geteilt durch 4 ergibt sich für die Bitkette 1010 also die Zahl 2.5. Der große Vorteil von Festkommazahlen ist, dass mit ihnen relativ einfach gerechnet werden kann. Der Nachteil dieser Darstellung ist allerdings offensichtlich: durch die feste Kommaposition ist der darstellbare Wertebereich sehr eingeschränkt. Aber Achtung: hier ist natürlich nicht die Anzahl der darstellbaren Zahlen gemeint – die beträgt weiterhin 232; vielmehr ist die Ausdehnung des Wertebereiches beschränkt, da für den ganzzahligen Anteil weniger Bits zur Verfügung stehen; die größte darstellbare Zahl ist also beschränkt.

1 / 2 / 3 / Auf einer Seite lesen

Kommentare (12)

  1. #1 Eckbert
    September 8, 2011

    Ein interessanter Artikel, den ich als (freiberuflicher) Programmierern gut nachvollziehen konnte. Gerade Vergleiche von zwei Gleitkommazahlen miteinander sind manchmal ein nicht zu unterschätzendes Problem.

  2. #2 rolak
    September 8, 2011

    Schöner Einführungstext – etwas verwirrend mag vielleicht sein, daß im Zuge der Umwandlung von 23.625 von Festkommazahlen die Rede ist, wo doch Fließkomma angesagt ist, oder wurde vorher explizit die Position des ‘Kommas’ im Bitstrom festgelegt. Ist halt nur unnormalisiert bzw ‘wie im täglichen Leben üblich’: Macht 12.95€ 😉
    Was vielleicht noch fehlt, ist der Hinweis daß wegen des hidden bit (der impliziten 1 vor dem Komma) die Null eine besondere Darstellung bekommt. (=>IEEE 754). Habe doch hoffentlich nicht die Einstiegspointe von Teil#2 verraten?

    Nö, Eckbert, gerade Vergleiche sind bei der üblichen Darstellung (biased exp) das Einfachste überhaupt – und komplizierter als eine Subtraktion kann es in keinem Format werden…

  3. #3 Marcus Frenkel
    September 8, 2011

    @rolak
    Doch. Die Pointe wurde jetzt versaut. 😉
    Aber schön, dass jemand mitdenkt. Mal sehen, ob ich die Festkommasache noch besser formulieren kann, danke.

  4. #4 LadyDarknis
    September 9, 2011

    0*2³ = 4 ?? / alles mit 0* = 0 | denke aber das es ehr Schreibfehler sind.
    Also für mich nachvollziehbar da ich Zahlen + PC Freak bin,
    aber für einen ich sag mal Otto-Normal Menschen
    nicht mal ansatzweise Verständlich beschrieben.
    Zumal das Thema eigentlich heißen müsste.
    PC´s können mangels Ressourcen nicht 100% richtig Rechnen.
    Und das ist schon bekannt seit der Zeit wo noch Bugs
    durch die Rechenmaschinen gelaufen sind.

    mfG LadyDarknis

  5. #5 Marcus Frenkel
    September 9, 2011

    @LadyDarknis
    Das “0*2³ = 4” haben Sie falsch interpretiert. Die 4 stammt von der Teilgleichung 1*2², den Teil 0*2³ habe ich beim Summieren weggelassen, da ohnehin 0.

    Könnten Sie näher erläutern, warum die Thematik für einen “Otto-Normal Menschen” “nicht mal ansatzweise Verständlich beschrieben” ist? Ich bin für konstruktive Kritik immer dankbar.

  6. #6 LadyDarknis
    September 9, 2011

    Im Artikel werden Grundlegende Zahllehren so wie PC Kenntnisse vorausgesetzt.
    Das Binäre-System wird nicht einmal Erklärt oder Benannt.
    Genauso ist nicht Erklärt was ein Bit ist oder dieser sich Aufbaut.
    Wo das doch genau der Kern der Problematik ist.

    Sicher ist das alles dann Recht aufwendig,
    aber den interessierten Leser sollte man so wenigstens einen Einstieg geben.
    Erst dann kann dieser Verstehen das eigentlich nicht der Rechner das Problem ist,
    sondern die Beschränktheit der heutigen Möglichkeiten/Mittel/Ressourcen.
    Die gemachten Rechnungen sollten anders dargestellt werden
    zur besseren Nachvollziehbarkeit.(Tabelle)

    p.s. wenn die Rechenmaschinen von heute einfach nicht mehr nur
    das Binäre-System nutzen können ( Strom | kein Strom ) sondern
    ich sag mal 3 Möglichkeiten ( Rot | Gelb | Blau ) könnten diese
    immer noch nicht 100% Richtig Rechen.

    mfG LadyDarknis

  7. #7 Marcus Frenkel
    September 9, 2011

    @LadyDarknis
    Kann es sein, dass Ihnen die vorhergehenden Artikel in diesem Blog entgangen sind, die all das erklären, was Sie anprangern? Einige davon sind sogar in diesem Artikel verlinkt, vielleicht schauen Sie da einfach nochmal drüber.

  8. #8 LadyDarknis
    September 9, 2011

    Wenn Ihre Artikel Aufeinander Aufbauen und ich das Übersehen habe,
    möchte ich mich dafür bei Ihnen Entschuldigen.
    Bitte Sie aber gleichermaßen darum das dann auch zu Schreiben,
    da die Überschrift auf eine Einleitung in ein Thema schließen lässt.
    Auch wer eine bessere Darstellungen so wie Nachvollziehbarkeit
    ihrer Rechnungen doch sehr hilfreich.

    mfG LadyDarknis

    p.s. ich wollte Sie mit meiner Kritik nicht Persönlich Angreifen

  9. #9 Marcus Frenkel
    September 9, 2011

    @LadyDarknis
    Nichts zu entschuldigen, das passiert.
    Die Links auf die Basisthemen sind allerdings, wie ich hoffe, eindeutig genug, dass jemand, der die entsprechenden Artikel noch nicht gelesen hat, beim Aufmerksamen lesen darauf gestoßen wird.

    Einige Rechnungen hätte man vielleicht etwas geschickter darstellen können, ja.

    Und ich habe die Kritik auch nicht als persönlichen Angriff aufgefasst; Kritik ist ja dafür da, dass man sich über das Gedanken macht, was man so von sich gibt – so sie denn in einer vernünftigen Form dargereicht wird (was hier ja der Fall war). Keine Sorge also. 😉

  10. #10 Matthias
    September 15, 2011

    Ich bin weder “Zahlen + PC Freak ” noch mathematisch all zu versiert. Was aber an diesem sehr verständlichen Text so unklar sein soll ist mir ein Rätsel. Natürlich musste ich ein paar Absätze mehrmals lesen, bis ich es verstanden habe. So what! Für Laien wie mich aber wunderbar aufbereitet. Weiter so und Danke dafür!

  11. #11 Axel
    Januar 5, 2015

    Vielen Dank für den Artikel – falls der noch gepflegt wird, eine Verständnisfrage:
    Müsste es nicht statt “Hat der Exponent zum Beispiel den Wert 23, so muss das (gedachte) Komma der gespeicherten Mantisse um 23 Stellen nach rechts geschoben werden” heißen: ” … um 23 Stellen nach links …”?

  12. #12 Marcus Frenkel
    Januar 5, 2015

    “nach rechts” ist schon richtig. Die Schreibweise 2*10^5 bedeutet ja zum Beispiel, das damit eigentlich die Zahl 200000 gemeint ist; von 2.0 ausgehend wird das Komma durch den Exponenten um 5 Stellen nach rechts verschoben, um zur gemeinten Zahl zu gelangen.