dez float zu IEE 754?



  • Grüße!
    Folgendes problem:
    Ich müsste eine floatzahl die ich char für char von einem anderen programmteil bekomme im IEEE 754 (1 bit vorzeichen, 8 bit exponent und 23bit mantisse [normalisiert]) standard in ein register speichern. Nur mit integer arithmetik.

    Theorie dazu ist auf dem papier kein problem, dennoch bin ich bei der implementation etwas ratlos.

    Frage:
    Wie bekomme ich von einer reihe einzeln überlieferten chars (stellen zahlen dar) letztendlich zu einer richtigen zahl? Wobei es verdammt viele stellen werden können (float, wobei einmal nur der teil vor dem komma betrachtet wird), sprengt also 32 od. 64bit bei weitem.

    Mit (char - 48) komme ich ja zu dem ascii code der der zahl entspricht. Jetzt könnt ich ein langes array im speicher anlegen das mir die einzelnen ziffern in jeweils einem byte hält. Nur wie füge ich die zusammen wenn mir nur begrenzt große register zu verfügung stehen?

    Würde mich über baldige antwort freuen 🙂 Schonmal danke.
    Ciao ~ smollo



  • Hei

    Für die Matisse brauchst du nur 23 Bit.
    Die haben leicht in einem Register platz.

    Ich würde so vor gehen.
    Initialisiere 4 Variabeln

    *)Vorzeichen=0
    *)Zahl=0
    *)Stelle=0
    *)Exponent=0

    1.) Zuerst liest du das Vorzeichen ein.

    2.) Du überspringst alle '0' Zeichen

    3.) Jetzt multiplizierst du "Zahl" mit 10,
    und zählst die Nächste Stelle hinzu.
    "Stelle" erhöhst du um 1.

    4.) Wenn "Zahl" mehr als 24 Bit hat (>FFFFFFh) dann schiebst du sie
    nach rechts und zählst zu "Exponent" 1 hinzu.
    Das machst du solange bis "Zahl" nicht mehr als 24 Bit hat

    5.) Wenn "Stelle" kleiner 8 ist dann mach bei Punkt 3 weiter.
    Wenn deine Zahl zu Ende ist gehe zu Punkt 9.

    6.) Jetzt multiplizierst du "Zahl" mit 10. Und iest das nächste Zeichen ein.

    7.) Wenn "Zahl" mehr als 24 Bit hat (>FFFFFFh) dann schiebst du sie
    nach rechts und zählst zu "Exponent" 1 hinzu.
    Das machst du solange bis "Zahl" nicht mehr als 24 Bit hat

    8.) Gehe zu Punkt 4

    9.) Wenn "Zahl" gleich 0 ist dann setze diene IEEE Zahl auf 0. (ENDE)

    10.) Wenn "Zahl" weniger als 24 Bit (<800000)hat dann schiebst du sie
    nach links und ziehst von "Exponent" 1 ab.
    Das machst du sollange bis "Zahl" 24 Bit hat

    11.) Jetzt löscht du das höchste Bit in "Zahl"
    Zahl = Zahl & 7FFFFFh

    12.) "Exponent" und "Zahl" ist deine IEEE Zahl


Anmelden zum Antworten