tutorials.de Buch-Aktion 02/2012
Like Tree1Danke
  • 1 Beitrag von engelmarkus
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
652
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    HentaiD HentaiD ist offline Mitglied
    Registriert seit
    Jul 2003
    Beiträge
    23
    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
     

  2. #2
    engelmarkus engelmarkus ist offline Mitglied Brokat
    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)
    HentaiD bedankt sich. 

  3. #3
    HentaiD HentaiD ist offline Mitglied
    Registriert seit
    Jul 2003
    Beiträge
    23
    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
     

  4. #4
    engelmarkus engelmarkus ist offline Mitglied Brokat
    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.
     

  5. #5
    HentaiD HentaiD ist offline Mitglied
    Registriert seit
    Jul 2003
    Beiträge
    23
    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

  1. Dezimalzahl teilen
    Von xxxmike im Forum PHP
    Antworten: 20
    Letzter Beitrag: 10.07.09, 12:23
  2. Dezimalzahl prüfen
    Von Arndtinho im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 12.09.06, 19:17
  3. Java Problem mit Binärzahl
    Von mitch_byu_kennen im Forum Java
    Antworten: 2
    Letzter Beitrag: 03.11.05, 10:26
  4. Dezimalzahl invertieren
    Von wasserflasche im Forum Visual Basic 6.0
    Antworten: 7
    Letzter Beitrag: 10.06.04, 17:22
  5. Antworten: 0
    Letzter Beitrag: 01.06.04, 14:04