Normalisert Flyttallsrepresentasjon Binære Alternativer


Jeg prøver å hjelpe noen med noen lekser og jeg får feil svar. Spørsmålet er dette: Represent -0.10937510 i normalisert flytpunktsrepresentasjon som har en 5-bits fraksjonal to-komplement-mantissa og et 3-biters heltall to komplementeksponent. Jeg har skrevet følgende notater: Lets ut svaret på spørsmålet: -0.10937510 Trinn 1: Konverter til binær. 0 0. 0 0 0 1 1 1 0 0 Trinn 2: Multiplikasjon med 1 (20) - (00.00011100) 2 x 20 Trinn 3: Skift for å gjøre mantissa hele tall Vi må gjøre 6 skift til venstre Hvorfor Fordi vi har 0.000111 Skift 1 00.00111 Skift 2 000.0111 Skift 3 0000.111 Skift 4 00001.11 Skift 5 000011.1 Skift 6 0000111 Derfor får vi, - (1112) x 2 (-6) Trinn 4: Konverter mantissa. I dette spørsmålet ble vi bedt om å konvertere til to-komplement (5-bits fraksjon). Derfor må vi konvertere 111 til to komplement og gjøre dette 5 bit. Trinn A: Konverter til en komplement (5 bit) -00111 11000 Trinn B: Konverter til Tredje komplement (5-bit) 11000 00001 110012 Trinn 5: Konverter eksponent topp 2-bits to komplement 2 (-6) Derfor må vi konvertere -6 til binær (to komplement) Trinn A: Konverter til binær 1 1 0 Trinn B : Konverter til de komplement (3-bit) 110 001 Trinn C: Konverter til to komplement 010 Svaret er da, 11001 0102 Som du kan se, virker 2-6 feil for et 3-biters komplement. Kan noen påpeke hva jeg kan gjøre galt Vanligvis er significand (ikke mantissa 1) skiftet, så den mest signifikante en bit er i en bestemt posisjon, ikke så signifikant er et heltall. IEEE 754-formatet normaliserer signalen til 1. dddd. hvor hver d er et siffer i basen som brukes. Hvis du skifter verdien til å flytte den første til den posisjonen, får du en eksponent på 4. Du ville ha 1.110 2 2 4. For å representere betydningen i to komplement, legger du til en annen bit til venstre, og produserer 01.110 2 2 4. og deretter Bruk negasjonen til å gi 10,010 for significand og 100 for eksponenten. Det kan imidlertid være litt variasjon på detaljer. Er signalen normalisert til 1. dddd eller .1 dddd. Er significand fem biter før du legger til en tegnbit eller etter Har du eksempler på verdier med kjente representasjoner i dette formatet Eller flere detaljer om formatet 1 Significand er det foretrukne uttrykket. En significand er lineær en mantissa er logaritmisk. Jeg er litt forvirret på hvordan å normalisere tall i C. Jeg vet at hvis du har noe som den flytende punkt binære verdien 1101.101, blir den normalisert som 1.101101 x 23 ved å flytte desimalpunktet 3 posisjoner til venstre. Men jeg er ikke sikker på hvordan dette gjøres i kode. Så hvis jeg har 10010000 exp 0 og jeg vil ha 01001000 exp 1, er brøkfeltet 001 og sluttresultatet er 010001. Hvis jeg har et 8-bits tall og de ledende 2 bitene er 00, vil jeg flytte det til jeg finn en 1, eller hvis jeg har en ledende bit på 01 så er den allerede normalisert. I likhet med en ledende 2 biter av 11 flytter jeg den til venstre. Så hvis nummeret mitt var 32 biter, 1 for tegnet, 8 for eksponenten, 23 for mantissaen, ville jeg gjøre noe som: Og så flere om setninger for de andre 2 ledende bitnumrene (00, 10), er jeg ikke sikker på om logikkoden min er riktig. Som du sier, må du trekke ut tegnet, mantissen og eksponenten. Diagrammet over tatt fra Wikipedia viser hvordan det er lagt ut for det mest vanlige singelpresjonsflatepunktformatet, IEEE 754. For å trekke ut hver del må vi gjøre dette i tre trinn som er beskrevet nedenfor. Jeg har ikke C-koden, men jeg vil vise trinnene du må ta. Etter trekk ut de tre delene, plasser du dem bare i bitposisjonene vist i diagrammet ovenfor. Hvis det er et usignert nummer, er dette alltid 0. Hvis det er signert, er det MSB. 2. Eksponent Hvis tallet er signert og negativt, må du bla alle biter og legge til 1 for å gjøre det positivt. Hvis ikke, kan du legge det som det er. For å trekke ut eksponenten må vi vite hvor binærpunktet er ment å være. La posisjonen til det binære punktet være b (I ditt eksempel er det 3). La første bit fra MSB som er 1 være p (I ditt eksempel er det 6). La eksponenten være e. 3. Mantissa Dette vil være lik biter fra posisjon p-1 ned til bit 0.Hvordan representerer 0.148 2 i normalisert flytpunktspunkt aritmetisk med formatet (0.148) (0.00100101111.) 2 Vi skifter det 3 biter til venstre for å lage det normaliserte (1.00101111) 2 2. Eksponent 1164 (75) (1001011) 2 og Mantissa (01001111) 2. Så flytende poengrepresentasjon er (0100101100101111) 2 (4B2F) Representasjon A Men hvis vi lagrer denormaliserte mantissa i 8 bit register, vil det ikke ha lagret de siste tre 1s og da vil mantissa normalisere fra (0.00100101) 2 til (1.00101000 ) 2 ved å sette 3 0s i stedet for 1s. Representasjonen ville ha vært (0100101100101000) 2 (4B28) Representasjon B Så mens normaliseringen tar prosessoren hensyn til de denormaliserte mantissebittene utover 8 biter også Eller bare runder den av Hvilken er riktig: A eller B Lagrer den mantissaen i fastpunktsrepresentasjon Hvordan fungerer det hele

Comments