Dualgleitkommazahl --> Dezimal < Technische Inform. < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Wie bekommt man aus der dualen Gleitkommazahl 0,101 die dezimale Zahl
Wie berechnet man diese rechte Seite von der dualen Gleitkommazahl?
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:00 Sa 08.01.2005 | Autor: | Sanne |
Hallo,
bei dieser Aufgabe kannst du relativ einfach vorgehen.
Zunächst erweiterst du deine umzurechnende Zahl entsprechend ihrer Nachkommastellen, sodass die Kommas wegfallen.
0,101 = [mm] \bruch{0101_2}{1000_2}
[/mm]
Anschließend rechnest du Zähler und Nenner separat ins Zielsystem, hier also ins Dezimalsystem, um und rechnest den Bruch aus. Das solltest du alleine schaffen, ist hier ja doch recht einfach, bei komplizierteren Umwandlungen (größere Zahlen oder untypischen Umwandlungen, z.B. Übungsaufgaben vom 4er ins 9er-System oder so) musst du evt. mit dem Horner-Schma arbeiten.
Zur Kontrolle - es kommt als Dezimalzahl 0,625 heraus.
Wenn du noch Fragen dazu hast, nur zu!
Gruß,
Sanne
|
|
|
|
|
Hallo!
> Wie bekommt man aus der dualen Gleitkommazahl 0,101 die
> dezimale Zahl
> Wie berechnet man diese rechte Seite von der dualen
> Gleitkommazahl?
Du kannst auch folgendermaßen vorgehen:
die Zahlen vor dem Komma entsprechen ja [mm] ...,2^n, 2^{n-1},...,2^2,2^1,2^0, [/mm] dementsprechende bedeuten die Stellen hinter dem Komma: [mm] 2^{-1},2^{-2},2^{-3},...,2^{-n},...
[/mm]
Du hast hier also folgende Dezimalzahl:
[mm] 2^{-1}+2^{-3}=0,5+0,125=0,625
[/mm]
siehe da - das richtige Ergebnis.
Viele Grüße
Bastiane
|
|
|
|
|
Ich habe noch eine Frage dazu :) Wie geht das in andere Richtung?
z.B.:
Wie bekomme ich aus 0,625 eine Dualzahl??
|
|
|
|
|
Hi,
> Ich habe noch eine Frage dazu :) Wie geht das in andere
> Richtung?
> z.B.:
> Wie bekomme ich aus 0,625 eine Dualzahl??
Also, ich nehme an, daß du das nicht in einem bestimmten IEEE-Format haben willst, dann formen wir erstmal um:
[m]\begin{gathered}
625:16 = 39{\text{ Rest }}1 \hfill \\
39:16 = 2{\text{ Rest }}7 \hfill \\
\hfill \\
1000:16 = 62{\text{ Rest }}8 \hfill \\
62:16 = 3{\text{ Rest }}14 \hfill \\
\end{gathered}[/m]
Damit:
[m]0.625 = \frac{{625}}
{{1000}} = \frac{{2|7|1_{16} }}
{{3|{\text{E|}}8_{16} }} = \frac{{1001110001_2 }}
{{1111101000_2 }}[/m]
Und jetzt kennst du ja bestimmt noch die Division aus der Schule, wie man große Zahlen per Hand dividiert, oder?
Jedenfalls kannst du das hier wohl auch machen. In diesem Falle dürfte das
sogar ziemlich schnell gehen, weil du nur zwei Ziffern hast, nämlich 0 und 1. Ich habe jetzt nur leider keine Zeit es vorzuführen.
Grüße
Karl
|
|
|
|
|
Kann man das irgendwie schneller machen??
Ich brauche einen Algorithmus, womit ich sehr schnell in der Pruefung eine Dualzahl bekommen koennte, ohne so viele Operationen und zu viele Zeit zu verlieren??
|
|
|
|
|
Hallo, vadimiron,
wenn Du schon mal in Assembler ( oder auch C, C++ ) programmiert hast, kennst Du vielleicht Schiebebefehle
beim Linksschieben - das entspricht einer "Verdopplung", "purzelt" links immer das höchstwertige Bit heraus.
Bei Dezimal representierten Zahl x, 0 < x < 1, wie das eben für 0,625 zutriff bedeutet das dann,
daß, wenn sie nach Verdopplung [mm] $\ge$ [/mm] ist, das Bit [mm] $2^{-1}$ [/mm] gesetz ist,
mit der nächsten Verdopplung erhält man den Wert des Bits [mm] $2^{-2}$ [/mm] usw,
wenn man vor jeder neuerlichen Verdopplung die vielleicht entstandene Vorkommastelle wegläßt:
0,625*2 = 1,25 ==> Bit 2^-1 = 1
0,250*2 = 0,50 ==> Bit 2^-2 = 0
0,500*2 = 1,00 ==> Bit 2^-3 = 1
0,000*2 = 0;00 ==> weitere Bits alle 0
Ergebnis
dezimal 0,625 = dual 0,101
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:03 Mo 10.01.2005 | Autor: | vadimiron |
Danke Leutz
Ihr habt sehr geholfen :)
|
|
|
|