Warum ist die Maschinenzahl auf der Basis 2 nicht exakt darstellbar?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Mit 0.1 ist hier wohl die Dezimalzahl 0.1 = 1/10 gemeint.

Da bei dem bereits vollständig gekürzten Bruch 1/10 der Nenner die Primfaktorzerlegung 10 = 2 * 5 hat und 5 nicht in der Primfaktorzerlegung von 2 vorkommt, bricht die 2-adische Entwicklung von 0.1 = 1/10 nicht ab. (Zwar wiederholen sich die Ziffern 0011 periodisch, aber trotzdem ist der "Nachkommaanteil" bzgl. Basis 2 unendlich lang.)

Bild zum Beitrag

Als Maschienenzahl bzgl. Basis 2 würde sich demnach einen benötigte Mantissenlänge von Unendlich ergeben. Und 32 ist nun einmal erheblich kleiner als Unendlich.

 - (Computer, Schule, Mathematik)

Unknown533 
Beitragsersteller
 21.08.2018, 19:19

Wie hätte ich das jetzt auf anhieb sehen können? Dumme frage... danke nochmals!

0
mihisu  21.08.2018, 19:22
@Unknown533

Naja, ich habe das so erkannt, wie ich es geschrieben habe:

0.1 = 1/10

Und in der Primfaktorzerlegung von 10 kommt die Zahl 5 vor, welche teilerfremd zur Basis 2 ist. Demnach ergibt sich ein unendlich langer (periodischer) Nachkommaanteil von 1/10 bzgl. Basis 2.

So hätte ich das gesehen und begründet. Ein kürzerer/schnellerer Weg, das spontan zu sehen, fällt mir jetzt nicht ein.

1
Unknown533 
Beitragsersteller
 21.08.2018, 19:23
@mihisu

Jo beim 2ten durchlesen hatte ich das dann auch gesehen. Deshalb dumme frage ^^

0
Unknown533 
Beitragsersteller
 21.08.2018, 19:18

Vielen dank :D

0

es kommt darauf an wie du es speicherst. Lege ich einen Integer an und sage ich berücksischtige genau 2 Nachkommastellen. Dann geht es exakt. Gleitpunktzahlen sind nicht für exakte Darstellung gedacht sondern eher dazu dass möglichst der ganze rationale Zahlenraum mit gewisser genauigkeit abbildbar ist. Sowohl riesig große als auch winzig kleine Zahlen. Das ganze wird jedoch binär umgerechnet und deswegen können nur Zahlen die sich aus 2er Potenzen mit (auch negativen) und addition zusammensetzen lassen genau dargestellt werden. Also für die Nachkommastellen sind dies folgende Summanden:

0,5 0,25 0,125 0,0625 0,03125 ... usw

Eine Zahl muss also aus der Summe obiger Summanden exakt zusammensetzbar sein.

Beispiel: 0,75 ist exakt darstellbar = 0,5 + 0,25

(ich betrachte jetzt die Nachkommastellen. Die Vorkommastellen sind exakt darstellbar solange die Zahl nicht zu viele gültige Vorkommastellen hat).


iqKleinerDrache  22.08.2018, 10:19

Fürs Programmieren also wichtig: wenn du z.B. Euro-Beträge summierst verwende nicht den REAL Datentyp, sondern den Integer. Rechne also eigentlich mit Cent und stelle dann am Ende nur das ganze als String mit Komma dar.

1
iqKleinerDrache  22.08.2018, 10:26
@iqKleinerDrache

wann immer also die maximale zahl nachkommastellen fest steht und auch die maximale zahl vorkommastellen und das ganze passt noch in einen Integer Datentyp, dann sollte man Integer nehmen. Wenn es einem beim Ergebnis um die Exponentialdarstellung geht (also z.B. 1,23456e-17) dann nicht.

1

So wie es beim 10er-System periodische Zahlen gibt (1 / 3 oder 1 / 7 ), so gibt es derartiges beim Dualsystem auch, und da ist eben 1 / 10 eine Periode...