Warum werden binäre Gleitkommazahlen so kompliziert gespeichert? |
Willibergi
Grünschnabel
Dabei seit: 28.02.2016
Beiträge: 2
|
|
Warum werden binäre Gleitkommazahlen so kompliziert gespeichert? |
|
Moin,
ich beschäftige mich momentan ein bisschen damit, wie Rechner rechnen.
Ich weiß, dass beispielsweise bei Java bei 10.5 - 0.5 = 9.9999999998 herauskommt, weil die binären Zahlen dann periodisch werden und gerundet werden.
Wenn ich die Zahl 12,45 habe, ist diese in binär
1100,011100 (das unterstrichene soll eine Periode darstellen)
12 ist aber 1100 und 45 ist 101101.
Warum ist dann aber 12,45 nicht 1100,101101?
Man erweitert dann die Zahl solange, bis es kein Komma mehr gibt und speichert die Stelle des Kommas in einem Extrabit (so wie das Vorzeichen auch gespeichert wird)
Ich weiß, wie man eine Gleitkommazahl binär umrechnet, aber warum macht man das so und nicht so, wie ich es gerade vorgestellt habe?
LG Willibergi
|
|
28.02.2016 13:44 |
|
|
|
Damit hättest du ein Overflow Problem, wie bei Integern auch.
Da nehme ich lieber die mangelnde Präzision hin, als komplett falsche Ergebnisse zu bekommen.
__________________ Syntax Highlighting fürs Board (Link)
|
|
28.02.2016 16:38 |
|
|
ed209
Routinier
Dabei seit: 07.09.2006
Beiträge: 324
|
|
RE: Warum werden binäre Gleitkommazahlen so kompliziert gespeichert? |
|
Zitat: |
Original von Willibergi
Warum ist dann aber 12,45 nicht 1100,101101?
Man erweitert dann die Zahl solange, bis es kein Komma mehr gibt und speichert die Stelle des Kommas in einem Extrabit (so wie das Vorzeichen auch gespeichert wird)
|
Gute Frage!
Man kann das Vorzeichen in einem einzelnen Bit speichern, weil es nur zwei Möglichkeiten gibt: Plus und Minus.
Wieviel Bit brauchst Du um die Stelle des Vorzeichen zu speichern? (Die Frage ist ein wenig tricky)
Gruß,
ED
|
|
28.02.2016 17:28 |
|
|
Willibergi
Grünschnabel
Dabei seit: 28.02.2016
Beiträge: 2
|
|
Zitat: |
Wieviel Bit brauchst Du um die Stelle des Vorzeichen zu speichern? (Die Frage ist ein wenig tricky) |
Ich weiß nicht, ob du das meinst, was du schreibst, aber für die Stelle des Vorzeichens brauche ich gar keinen Bit - das ist nämlich immer vorne.
Wenn du die Stelle des Kommas meinst, wäre dieser Wert unendlich groß, weil es unendlich viele Stellen nach dem Komma geben kann.
Aber ein Double, also der größtmögliche Datentyp für Kommazahlen, ist auf 15 signifikante Stellen genau.
Ich hätte dann maximal einen Wert von 15, wenn ich das Komma speichere.
Ich schätze, das wären 4 Bit, oder? (1111 = 15)
LG Willibergi
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Willibergi: 28.02.2016 18:16.
|
|
28.02.2016 18:11 |
|
|
|