1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
652
652
EMPFEHLEN
-
Hallo Freunde,
ich arbeite gerade an einem Algorithmus, der u.U. sehr große Dezimalzahlen einlesen soll und diese in Binärzahlen umwandeln soll.
Da ich wissen muss, wieviel Speicher ich allozieren muss, wäre es sicher praktisch vorher zu wissen, wieviel ich denn wirklich brauche. Gibt es da eine feste Zahl? Es gibt ja bei Hexadezimalzahlen den Vorteil, dass man weiß, dass eine Digit 4 Bit lang ist. Also wäre der String von hex -> bin wohl 4 mal so lang.
Ich habe auch mal was von einer Zahl für die Umwandlung von dez -> hex gelesen. War ca. 0,8 oder so etwas.
Wäre super, wenn da jemand eine (sehr) exakte Antwort wüsste. Vielen Dank
LG, D
-
13.08.10 23:52 #2
- Registriert seit
- Sep 2007
- Beiträge
- 473
Das wird nicht gehen, weil du das hier nicht hinkriegst: 2^x = 10
Also kommst du auch nicht auf eine feste Anzahl an Binärstellen, um die du weiterrutschen musst, um die nächste dezimale Stelle zu erwischen.
Du könntest mit BCD-Werten arbeiten, wobei das natürlich nicht direkt eine Lösung für dein Problem ist.
Also wenns dir ungefähr reicht, wäre das oben 3,32. Aber ob das sicher ist?Geändert von engelmarkus (13.08.10 um 23:55 Uhr)
-
Hallo Markus,
vielen Dank für die schnelle Antwort. Ich denke der approximierte Wert reicht aus. Ansonsten lese ich mir gerne nochmal den BCD Artikel durch, aber schön, dass ich gerade durch 2^x = 10 aufgeweckt wurde. Das ist natürlich schonmal sehr hilfreich, ich denke damit lässt sich einigermaßen arbeiten, wenn man ein bisschen aufrundet.
Im Grunde genommen habe ich nämlich unteilbare 32bit Variablen zur Verfügung, da ist es wahrscheinlich, dass die Größe passt.
LG, D
-
14.08.10 00:05 #4
- Registriert seit
- Sep 2007
- Beiträge
- 473
Mir ist grad noch was eingefallen... 8 und 9 sind ja 4 Bits lang. Wenn du jetzt eine sehr große Zahl hast, also von den einzelnen Ziffernwerten her, dann brauchst du mehr als du mit 3,32*... rauskriegst. Nimm also am besten 4 Bits pro Stelle an, dann kann nichts schief gehen.
-
Ich denke die Aufrundfunktion würde das regeln, solange die letzte Stelle schon aufegerundet ist. Wenn man also 9 als Ziffer hat:
Math.Ceil(Länge der Eingabe (also 1) * 3,32....) = 4
Denke das lässt sich dann auch auf große Zahlen extrapolieren. Ich befürchte nur viel eher, dass am Ende doch viel zu viel Speicher reserviert wird.
Habe das jetzt mal bis 99999 ausprobiert, scheint zu funktionieren.
99999 : Math.Ceil(Länge der Eingabe (5) * 3,32....) = 17
Tatsächlich hat 99999 17 Stellen im Binärsystem. Supi.
LG, D
Ähnliche Themen
-
Dezimalzahl teilen
Von xxxmike im Forum PHPAntworten: 20Letzter Beitrag: 10.07.09, 12:23 -
Dezimalzahl prüfen
Von Arndtinho im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 12.09.06, 19:17 -
Java Problem mit Binärzahl
Von mitch_byu_kennen im Forum JavaAntworten: 2Letzter Beitrag: 03.11.05, 10:26 -
Dezimalzahl invertieren
Von wasserflasche im Forum Visual Basic 6.0Antworten: 7Letzter Beitrag: 10.06.04, 17:22 -
Excel: Vergleich und Index, wobei auch vergleich auf kleiner als!
Von sdh im Forum Office-AnwendungenAntworten: 0Letzter Beitrag: 01.06.04, 14:04





Zitieren
Login




