Warum ist die Maschinenzahl auf der Basis 2 nicht exakt darstellbar?
Warum ist 0.1 nicht exakt darstellbar. Ich hätte jetzt gedacht mantissenlänge und exponenten sind sehr groß also warum nicht?
3 Antworten
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.)
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.

Aber vll kannst du mir hier auch noch helfen. Es geht um die Mantissenlänge
https://www.gutefrage.net/frage/warum-ist-0375-exakt-darstellbar-in-m22-12#answer-288660885
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.
Jo beim 2ten durchlesen hatte ich das dann auch gesehen. Deshalb dumme frage ^^
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).
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.
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.
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...
Kannst du dir die aufgabe vll auch mal angucken?
https://www.gutefrage.net/frage/warum-ist-0375-exakt-darstellbar-in-m22-12#answer-288660885
Wie hätte ich das jetzt auf anhieb sehen können? Dumme frage... danke nochmals!