Gå til innhold

[Løst]Konvertere flyttallsstreng til binær data?


Anbefalte innlegg

Jeg har allerede kodet et program som konverterer en float (datatype) til binærstrøm (eller sagt på en annen måte den skriver ut bit'ene til flyttallet. det er: forttegn, eksponent og mantissa). Nå har det seg slik at grunnen til at jeg gjør dette er for å lære mer om hvordan flyttall fungerer i praksis. jeg vil kode en klasse som kan operere med flyttall som er større enn 32 og 64-bits. nå kan jeg jo selvsagt bruke double til 64-bit, men som sagt jeg vil øke presisjonen enda mer. jeg har ingen planer om å bruke noe bibliotek til dette ellers hadde jeg ikke startet dette emnet her inne.

 

så nå er oppgaven min først å konvertere en streng til en float i 32-bits slik at jeg vet at konverteringa fungerer, men det er her ting begynner å bli knotette. jeg har ingen planer om å bruke atof heller siden den er begrenset til 32-bits osv.

så planen er å lagre disse store flyttallene i en bit- eller byte-strøm.

så når jeg konverterer strengen gjør jeg dette:

 

- ser om strengen inneholder "."

- hvis den gjør det så looper jeg igjennom hvert siffer bak "."-tegnet. For hvert siffer adder jeg verdien til sifferet * (1 / (10 ^ (antallet posisjoner til høyre for tallet)) til verdien.

- looper igjennom hvret siffer til venstre for "."-tegnet (hele strengen hvis det ikke er noe "."-tegn).

- for hvert siffer adder (verdien til sifferet * (10 ^(antallet posisjoner til venstre for "."-tegnet eller enden av strengen))) til verdien.

- hvis strengen begynner med "-", multipliser tallet med -1.

 

så denne prosessen er grei, og for å teste lagra jeg tallet i en float, men jeg vil jo lagre flyttallet i en bit-strøm uten at float(datatypen) er involvert. hvordan går man frem til det når innputten er en streng og den overnevnte prosessen er gjennomført? må jeg gjøre det i base-2 og ikke base-10 kanskje?. jeg har også lest noe i IEEE standarden om at mantissa normaliseres, men jeg skjønner ikke helt hvordan det skjer og om det er relevant til problemet jeg har. om det finnes en plass hvor det er skrevet om hvordan kompilatorer gjør dette så tror jeg kanskje det hadde hjulpet såfremst det ikke er mye innviklede greier. :p

 

en annen ting jeg har brukt er formelen:

flyttall = forttegn * (2 ^ eksponent) * mantissa

den er grei nok, men her er tallet allerede lagret i en bit-strøm og det er denne prosessen jeg vil reversere.

 

jeg ser for meg at kanskje det kan gjøres noe med denne?

mantissa = flyttall / (forttegn * 2^eksponent)

 

edit: koden over er en slags tankegang på hvordan prosessen kanskje bør se ut uten float-datatype, men med det er ikke sikkert det er veien å gå.

 

jeg tror jeg har skrevet nok i denne omgang, så jeg vil komme tilbake om det er noe uklarheter i teksten evnt om jeg kommer på noe annet å si. jeg vet heller ikke hvor mange mennesker her inne som har jobbet med flyttall på denne måten før og kan si noe om hvordan den prosessen foregår.

Endret av rydi
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...