Umwandlung von Zahlen aus dem Dezimal- ins Dualsystem, wenn Exponentialformat gegeben

theHacker

sieht vor lauter Ads den Content nicht mehr
Teammitglied
ID: 69505
L
20 April 2006
22.682
1.316
Ich beschäftige mich grade mit dem IEEE 754-Standard und steh vor einem Problem:
Wie wandle ich z.B. eine gegebene Zahl 5,624*(10^21) ins Dualsystem um ?

Der Weg über
5,624*(10^21) =
= 5'624'000'000'000'000'000'000 =
= 1*4'722'366'482'869'645'213'696 + 0*2'361'183'241'434'822'606'848 + ... =
= 1*(2^72) + 0*(2^71) + ... =
= (10....)b =
= (1,0....)b*(2^72)d
scheint mir doch ein wenig kompliziert :mrgreen:

Gibt's da irgendn Trick, um die Fünfer, die übrig bleiben, wenn ich mir die Zweier aus der Zehnerpotenz rauszieh, irgendwie leicht zu verarbeiten ?
 
was meinst du mit "umwandeln" ... brauchst du hinterher einen 01-string oder ein int?
01-String, wenn du so willst.

Ich mach mal ein ganzes Beispiel:
Wenn ich -3,755*10^2 hab, dann möchte ich am Ende (-101110111,1)b haben.

32bit-Gleitkommazahl wäre dann ja:
(-101110111,1)b = -(1,011101111)b*(2^8)d

Nach IEEE:
1 10000111 01110111100000000000000
V EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM

Ich würde es einfach rekursiv lösen, eine andere Möglichkeit wäre mir nicht bekannt.
Achso, sollte ich vielleicht noch erwähnen: Das Verfahren sollte von Hand rechenbar sein, weil automatisiert kann ich ja auch mit den großen Zahlen rechnen.

Ich frag eigentlich auch nur, weil ich grade meinen Uni-Stoff durcharbeite und ein paar Zahlen umrechnen üben wollt und mir dann selber ne Aufgabe gestellt hab, die ich ned geschafft hab
icon_mrgreen.gif
 
Ich würde es einfach rekursiv lösen, eine andere Möglichkeit wäre mir nicht bekannt.

nun es gäbe z.b. base_convert($x,10,2) oder int($x,2) ... die frage ist eben, was genau gemeint ist. bei zu langen zahlen würde ich einfach eine schleife machen und das ganze als string behandeln. nicht schön, aber effektiv bzw. notwendig, wenn man den unsigned int-raum verlässt...


[edit] achso, zu spät. von hand kann ichs auch nicht mehr. ist sooooo lange her :)[/edit]
 
Ich bin ja auch dumm :doh:

Jetzt hab ich mir n Schmierblatt genommen unds einfach hingeschrieben. Dass ich die Fünferpotenz ausrechnen muss, da kann mich ja logischerweise kein Weg dranvorbeiführen :-?

Mein Eingangsbeispiel nochmal:
5,624*(10^21) =
= 5,624 * (5^21) * (2^21) =
= 5,624 * 625^5 *5 * (2^21) =
= 5,624 * 625^5 *5 * (2^21) =
= 5,624 * 390'625^2 * 625 *5 * (2^21) =
= 5,624 * 152'587'890'625 * 625 *5 * (2^21) =
= 5,624 * 95'367'431'640'625 *5 * (2^21) =
= 5,624 * 476'837'158'203'125 * (2^21) =
= 2'681'732'177'734'375 * (2^21) =
An dieser Stelle hab auch wieder eine große Zahl, die ich umrechnen muss und an der ich nicht vorbeikomm.
Ich werf hier mal den Taschenrechner an, um die umzurechnen:
= 2'681'732'177'734'375 * (2^21) =
= (1001'10000111'00000101'01101101'11010110'00101010'11100111)b * (2^21)d =
= (1,001100001110000010101101101110101100010101011100111)b*(2^51)d *(2^21)d =
= (1,001100001110000010101101101110101100010101011100111)b*(2^72)d
Dargestellt dann so (letzte Stelle musste aufgerundet werden):
0 11000111 00110000111000001010111
V EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM

Einfach fragen kann manchmal Wunder wirken, dass man sich selber eine Antwort geben kann :)