Dezimal zu Dual
Kay
- sonstiges
0 david87hd-2 Gernot Back0 dedlfix1 ziegenmelker0 Kay
0 Axel Richter0 Der Martin0 Kay0 Kay
Hallo,
um Dezimalzahlen in Dualzahlen umzuwandeln, verwende ich momentan folgenden Algorithmus:
Dezimal = 54
Dual = ""
WIEDERHOLE SOLANGE Dezimal > 0
Dual = (Dezimal Mod 2) + Dual
Dezimal = Dezimal / 2
ENDEWIEDERHOLE
wie wandle ich aber nun Nachkommastellen einer Dezimalzahl z.B. 54,3 in eine Dualzahl um?
Vielen Dank,
Kay
Vielleicht einfach am Anfang die Zahl beim Komma teilen?
var Dualzahl=Dezimalzahl.toString(2) tut's auch.
Gernot,
War irgendwo die Rede von JavaScript?
Gunnar
da müsste man ja Java verwenden...
trotzdem vielen Dank.
Kay
wie wandle ich aber nun Nachkommastellen einer Dezimalzahl z.B. 54,3 in eine Dualzahl um?
Als ich google nach dualzahl befragte gab er mir auf der ersten Seite diese Fundstelle:
Hallo,
um Dezimalzahlen in Dualzahlen umzuwandeln, verwende ich momentan folgenden Algorithmus:
Dezimal = 54
Dual = ""
WIEDERHOLE SOLANGE Dezimal > 0
Dual = (Dezimal Mod 2) + Dual
Dezimal = Dezimal / 2
ENDEWIEDERHOLEwie wandle ich aber nun Nachkommastellen einer Dezimalzahl z.B. 54,3 in eine Dualzahl um?
Rest = 0,3
Dual2 = ""
WIEDERHOLE SOLANGE Rest > 0
Rest = Rest * 10 / 5
Int1 = INTERGERTEIL(Rest)
Dual2 = Dual2 + STRING(Int1)
Rest = Rest - Int1
ENDEWIEDERHOLE
Damit das nicht unendlich lange geht sollte man noch eine Abbruchbedingung definieren.
cu,
ziegenmelker
Alles klar - hab's hinbekommen, vielen Dank.
Kay
Hallo,
wie wandle ich aber nun Nachkommastellen einer Dezimalzahl z.B. 54,3 in eine Dualzahl um?
Einfacheres Beispiel:
9.3
1. Zerlegen in Ganzzahl und echten Bruch
= 9 + 0.3
2. Ganzzahl:
9 : 2 = 4 Rest 1
4 : 2 = 2 Rest 0
2 : 2 = 1 Rest 0
1 : 2 = 0 Rest 1
3. Bruch:
0.3 * 2 = 0.6 Ganzzahlanteil 0
0.6 * 2 = 1.2 Ganzzahlanteil 1
0.2 * 2 = 0.4 Ganzzahlanteil 0
0.4 * 2 = 0.8 Ganzzahlanteil 0
0.8 * 2 = 1.6 Ganzzahlanteil 1
0.6 * 2 = 1.2 Ganzzahlanteil 1
ab hier wirds periodisch
4. Zusammenfassen
9.3(10) = 1001.010011001100110011(2)
http://www.netzmafia.de/skripten/ad/ad6.html
Aber welche praktische Bedeutung hat das? In der Praxis werden Fließkommazahlen (floating point) benutzt.
viele Grüße
Axel
Hallo Axel,
Aber welche praktische Bedeutung hat das? In der Praxis werden Fließkommazahlen (floating point) benutzt.
Ja, aber genau so werden Fließkommanzahlen intern codiert, als
f = m * 2^e
wobei nach irgendeiner IEEE-Norm immer 0.5<=m<1 und e ganzzahlig ist. Damit wird also die Mantisse m genau so gebildet, wie du es beschrieben hast.
So long,
Martin
Alles klar, super - vielen Dank.
Kay
Hallo,
ich hab' völlig vergessen zu fragen, wie man die Nachkommastellen einer Dualzahl wieder in eine Dezimalzahl umwandeln kann?
Beispiel: 100,1
Vielen Dank,
Kay
Hallo,
ich hab' völlig vergessen zu fragen, wie man die Nachkommastellen einer Dualzahl wieder in eine Dezimalzahl umwandeln kann?
Beispiel: 100,1
100.1(2) = 1*2^2 + 0*2^1 + 0*2^0 + 1*2^-1
4 + 0 + 0 + 0.5
= 4.5(10)
Und hier ist das Problem. Die Rückrechnung von z.B. 0.3 geht nur gerundet.
____
0.3(10) = 0.01001(2)
= 0*2^1 + 0*2^-1 + 1*2^-2 + 0*2^-3 + 0*2^-4 + 1*2^-5 + 1*2^-6
= 0.25 + 0.03125 + 0,015625
= 0,296875
viele Grüße
Axel
Axel,
Und hier ist das Problem. Die Rückrechnung von z.B. 0.3 geht nur gerundet.
Nö. Wenn du wirklich alle Perioden mitrechnest (Reihenentwicklung), kommt auch genau 0,3 raus. Nur dass Rechner schon nach endlich vielen Schluss machen, verfälscht das Ergebnis.
0.3(10) = 0.01001(2)
= 0*2^1 + 0*2^-1 + 1*2^-2 + 0*2^-3 + 0*2^-4 + 1*2^-5 + 1*2^-6
= 0.25 + 0.03125 + 0,015625
= 0,296875
Aber zwei, drei Perioden mehr dürften’s doch sein, dann wird’s auch genauer.
Gunnar