Matlab Gleitkommazahl < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 16:36 Di 02.02.2010 | Autor: | JanaS |
Aufgabe | Beschreibe kurz, wie Gleitkommazahlen in einem Computer dargestellt werden. Können die folgenden Zahlen exakt gespeichert werden in einem Computer und warum bekommen wir diese Fehler?
.5/0.1-5, 0.6/0.3-2, 0.7/0.2-3.5 und 0.8/0.4-2 |
Hallo!
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Es geht um Matlab. Gleitkommazahlen habe ich schon beschrieben, also dass sie so dargstellt werden: [mm] x=m*b^e. [/mm] Wenn ich die oben genannten Aufgaben bei Matlab eingebe, so bekomme ich immer die erwünschte 0 bis auf 0.7/0.2-3.5. Da schmeisst Matalb als Ergebnis -4.440892098500626e-016 heraus. Warum?
Vielen Dank für Eure Hilfe schonmal!
Viele Grüsse von Jana
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:46 Di 02.02.2010 | Autor: | rainerS |
Hallo Jana!
> Beschreibe kurz, wie Gleitkommazahlen in einem Computer
> dargestellt werden. Können die folgenden Zahlen exakt
> gespeichert werden in einem Computer und warum bekommen wir
> diese Fehler?
> .5/0.1-5, 0.6/0.3-2, 0.7/0.2-3.5 und 0.8/0.4-2
> Hallo!
>
> Ich habe diese Frage in keinem Forum auf anderen
> Internetseiten gestellt.
>
> Es geht um Matlab. Gleitkommazahlen habe ich schon
> beschrieben, also dass sie so dargstellt werden: [mm]x=m*b^e.[/mm]
> Wenn ich die oben genannten Aufgaben bei Matlab eingebe, so
> bekomme ich immer die erwünschte 0 bis auf 0.7/0.2-3.5. Da
> schmeisst Matalb als Ergebnis -4.440892098500626e-016
> heraus. Warum?
Welche der Zahlen können exakt dargestellt werden? Berücksichtige dabei die Zwischenergebnisse, das heisst schau dir an, was bei 0.7/0.2 herauskommt und wie sich dieses Zwischenergebnis von 3.5 unterscheidet. In der Standardausgabe siehst du den Unterschied nicht, aber wenn du vorher
format hex
eingibst, wird die interne Darstellung angezeigt. (Mit "format" schaltest du wieder zurück).
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:39 Di 02.02.2010 | Autor: | JanaS |
>
> > Beschreibe kurz, wie Gleitkommazahlen in einem Computer
> > dargestellt werden. Können die folgenden Zahlen exakt
> > gespeichert werden in einem Computer und warum bekommen wir
> > diese Fehler?
> > .5/0.1-5, 0.6/0.3-2, 0.7/0.2-3.5 und 0.8/0.4-2
> > Hallo!
> >
> > Ich habe diese Frage in keinem Forum auf anderen
> > Internetseiten gestellt.
> >
> > Es geht um Matlab. Gleitkommazahlen habe ich schon
> > beschrieben, also dass sie so dargstellt werden: [mm]x=m*b^e.[/mm]
> > Wenn ich die oben genannten Aufgaben bei Matlab eingebe, so
> > bekomme ich immer die erwünschte 0 bis auf 0.7/0.2-3.5. Da
> > schmeisst Matalb als Ergebnis -4.440892098500626e-016
> > heraus. Warum?
>
> Welche der Zahlen können exakt dargestellt werden?
> Berücksichtige dabei die Zwischenergebnisse, das heisst
> schau dir an, was bei 0.7/0.2 herauskommt und wie sich
> dieses Zwischenergebnis von 3.5 unterscheidet. In der
> Standardausgabe siehst du den Unterschied nicht, aber wenn
> du vorher
>
> format hex
>
> eingibst, wird die interne Darstellung angezeigt. (Mit
> "format" schaltest du wieder zurück).
>
> Viele Grüße
> Rainer
Hallo Rainer!
Danke für Deine Antwort! Ich sehe jetzt den Unterschied zwischen 0.7/0.2 und 3.5. Aber ich verstehe noch nicht so ganz, WARUM da ein Unterschied ist? Was bedeuten die b's und f's? Ich habe versucht, etwas über das Hexadezimalsystem zu lesen, damit hängt das wohl zusammen, oder? Aber verstanden habe ich es nicht :-(.
Viele Grüsse, Jana
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 21:08 Di 02.02.2010 | Autor: | rainerS |
Hallo Jana!
> >
> > > Beschreibe kurz, wie Gleitkommazahlen in einem Computer
> > > dargestellt werden. Können die folgenden Zahlen exakt
> > > gespeichert werden in einem Computer und warum bekommen wir
> > > diese Fehler?
> > > .5/0.1-5, 0.6/0.3-2, 0.7/0.2-3.5 und 0.8/0.4-2
> > > Hallo!
> > >
> > > Ich habe diese Frage in keinem Forum auf anderen
> > > Internetseiten gestellt.
> > >
> > > Es geht um Matlab. Gleitkommazahlen habe ich schon
> > > beschrieben, also dass sie so dargstellt werden: [mm]x=m*b^e.[/mm]
> > > Wenn ich die oben genannten Aufgaben bei Matlab eingebe, so
> > > bekomme ich immer die erwünschte 0 bis auf 0.7/0.2-3.5. Da
> > > schmeisst Matalb als Ergebnis -4.440892098500626e-016
> > > heraus. Warum?
> >
> > Welche der Zahlen können exakt dargestellt werden?
> > Berücksichtige dabei die Zwischenergebnisse, das heisst
> > schau dir an, was bei 0.7/0.2 herauskommt und wie sich
> > dieses Zwischenergebnis von 3.5 unterscheidet. In der
> > Standardausgabe siehst du den Unterschied nicht, aber wenn
> > du vorher
> >
> > format hex
> >
> > eingibst, wird die interne Darstellung angezeigt. (Mit
> > "format" schaltest du wieder zurück).
> >
> > Viele Grüße
> > Rainer
>
> Hallo Rainer!
>
> Danke für Deine Antwort! Ich sehe jetzt den Unterschied
> zwischen 0.7/0.2 und 3.5. Aber ich verstehe noch nicht so
> ganz, WARUM da ein Unterschied ist? Was bedeuten die b's
> und f's? Ich habe versucht, etwas über das
> Hexadezimalsystem zu lesen, damit hängt das wohl zusammen,
> oder? Aber verstanden habe ich es nicht :-(.
Du kannst die Hexadezimalziffern einfach in Bits (im Dualsystem) übersetzen; jede Ziffer entspricht genau 4 Bits, wie es hier in dieser Tabelle dargestellt ist. Was du hier siehst, ist eine standardisierte Darstellung von 64bit langen Gleitkommazahlen, sieh hier. Die ersten 12 Bit, also die ersten 3 Hexadezimalstellen stehen für Vorzeichen und Exponenten, der Rest für die Mantisse.
Wesentlich für dich ist hier, dass sich die beiden Zahlen nur in der Mantisse unterscheiden, nicht im Exponenten.
Zum Beispiel:
3.5 = 400c000000000000
Die Mantisse beginnt mit der 4. Hex-Ziffer, also c000..., oder als Bits: 1100 (+ weitere 48 0-Bits).
Die andere Zahl:
0.7/0.2 = 400bffffffffffff
Mantisse: bfff..., als Bits 1011 (+ weitere 48 1-Bits)
Mit anderen Worten: die Mantisse der ersten Zahl 3.5 ist gerade um 1 in der hinteresten Stelle größer als die Mantisse der zweiten Zahl 0.7/0.2 .
In der normalen Ausgabe ist dieser Unterschied nicht sichtbar, weil bei der Umwandlung der Binär- in die Dezimaldarstellung immer gerundet wird.
Bleibt noch die Frage, warum dieser Effekt nur bei der Division 0.7/0.2 auftritt, aber nicht bei 0.6/0.3 oder 0.8/0.4. Dazu schaust du dir am besten die Darstellungen der einzelnen Zahlen vor der Division an. Du wirst sehen, dass sich zum Beispiel bei 0.6 und 0.3 nur die Exponenten unterscheiden, nicht aber die Mantissen. Daher ist eine exakte Division möglich, obwohl die Binärdarstellung der einzelnen Zahlen nicht exakt ist.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:38 Do 04.02.2010 | Autor: | JanaS |
> Hallo Jana!
>
> > >
> > > > Beschreibe kurz, wie Gleitkommazahlen in einem Computer
> > > > dargestellt werden. Können die folgenden Zahlen exakt
> > > > gespeichert werden in einem Computer und warum bekommen wir
> > > > diese Fehler?
> > > > .5/0.1-5, 0.6/0.3-2, 0.7/0.2-3.5 und 0.8/0.4-2
> > > > Hallo!
> > > >
> > > > Ich habe diese Frage in keinem Forum auf anderen
> > > > Internetseiten gestellt.
> > > >
> > > > Es geht um Matlab. Gleitkommazahlen habe ich schon
> > > > beschrieben, also dass sie so dargstellt werden: [mm]x=m*b^e.[/mm]
> > > > Wenn ich die oben genannten Aufgaben bei Matlab eingebe, so
> > > > bekomme ich immer die erwünschte 0 bis auf 0.7/0.2-3.5. Da
> > > > schmeisst Matalb als Ergebnis -4.440892098500626e-016
> > > > heraus. Warum?
> > >
> > > Welche der Zahlen können exakt dargestellt werden?
> > > Berücksichtige dabei die Zwischenergebnisse, das heisst
> > > schau dir an, was bei 0.7/0.2 herauskommt und wie sich
> > > dieses Zwischenergebnis von 3.5 unterscheidet. In der
> > > Standardausgabe siehst du den Unterschied nicht, aber wenn
> > > du vorher
> > >
> > > format hex
> > >
> > > eingibst, wird die interne Darstellung angezeigt. (Mit
> > > "format" schaltest du wieder zurück).
> > >
> > > Viele Grüße
> > > Rainer
> >
> > Hallo Rainer!
> >
> > Danke für Deine Antwort! Ich sehe jetzt den Unterschied
> > zwischen 0.7/0.2 und 3.5. Aber ich verstehe noch nicht so
> > ganz, WARUM da ein Unterschied ist? Was bedeuten die b's
> > und f's? Ich habe versucht, etwas über das
> > Hexadezimalsystem zu lesen, damit hängt das wohl zusammen,
> > oder? Aber verstanden habe ich es nicht :-(.
>
> Du kannst die Hexadezimalziffern einfach in Bits (im
> Dualsystem) übersetzen; jede Ziffer entspricht genau 4
> Bits, wie es
> hier in dieser Tabelle
> dargestellt ist. Was du hier siehst, ist eine
> standardisierte Darstellung von 64bit langen
> Gleitkommazahlen, sieh
> hier.
> Die ersten 12 Bit, also die ersten 3 Hexadezimalstellen
> stehen für Vorzeichen und Exponenten, der Rest für die
> Mantisse.
>
> Wesentlich für dich ist hier, dass sich die beiden Zahlen
> nur in der Mantisse unterscheiden, nicht im Exponenten.
>
> Zum Beispiel:
>
> 3.5 = 400c000000000000
>
> Die Mantisse beginnt mit der 4. Hex-Ziffer, also c000...,
> oder als Bits: 1100 (+ weitere 48 0-Bits).
>
>
> Die andere Zahl:
>
> 0.7/0.2 = 400bffffffffffff
>
> Mantisse: bfff..., als Bits 1011 (+ weitere 48 1-Bits)
>
> Mit anderen Worten: die Mantisse der ersten Zahl 3.5 ist
> gerade um 1 in der hinteresten Stelle größer als die
> Mantisse der zweiten Zahl 0.7/0.2 .
>
> In der normalen Ausgabe ist dieser Unterschied nicht
> sichtbar, weil bei der Umwandlung der Binär- in die
> Dezimaldarstellung immer gerundet wird.
>
> Bleibt noch die Frage, warum dieser Effekt nur bei der
> Division 0.7/0.2 auftritt, aber nicht bei 0.6/0.3 oder
> 0.8/0.4. Dazu schaust du dir am besten die Darstellungen
> der einzelnen Zahlen vor der Division an. Du wirst sehen,
> dass sich zum Beispiel bei 0.6 und 0.3 nur die Exponenten
> unterscheiden, nicht aber die Mantissen. Daher ist eine
> exakte Division möglich, obwohl die Binärdarstellung der
> einzelnen Zahlen nicht exakt ist.
>
> Viele Grüße
> Rainer
Hallo Rainer!
Hab vielen Dank für Deine Geduld und Deine Hilfe!
Viele Grüsse, Jana
|
|
|
|