Wednesday 15 November 2017

Normalized flyttalsrepresentation binära alternativ


Jag är lite förvirrad på hur man normaliserar tal i C. Jag vet att om du har något som det flytande punkt binära värdet 1101.101, normaliseras det som 1.101101 x 23 genom att flytta decimalpunkten 3 positioner till vänster. Men jag är inte säker på hur man gör detta i kod. Så om jag har 10010000 exp 0 och jag vill få 01001000 exp 1 är fraktionsfältet 001 och slutresultatet är 010001. Om jag har ett 8-bitars nummer och de ledande 2 bitarna är 00, vill jag flytta det tills jag hitta en 1, eller om jag har en ledande bit på 01 så är det redan normaliserat. Liksom för en ledande 2 bitar av 11 flyttar jag den till vänster. Så om mitt nummer var 32 bitar, 1 för tecknet, 8 för exponent 23 för mantissa, skulle jag göra något som: Och då flera mer om uttalanden för de andra 2 ledande bitnumren (00, 10) är jag inte säker på om min logikod har rätt. Som du säger måste du extrahera tecknet, mantissa och exponent. Diagrammet ovan taget från Wikipedia visar hur det är utformat för det vanligaste single-precision floating point-formatet, IEEE 754. För att extrahera varje del behöver vi göra det i tre steg som beskrivs nedan. Jag har inte C-koden men jag visar de steg du behöver ta. Efter extraktion av de 3 delarna placeras de bara i de bitpositioner som visas i diagrammet ovan. Om det är ett osignerat nummer är detta alltid 0. Om det är signerat är det MSB. 2. Exponent Om talet är signerat och negativt måste du vända alla bitar och lägga till 1 för att göra det positivt. Om inte kan du lämna den som den är. För att extrahera exponent måste vi veta var binärpunkten är avsedd att vara. Låt läget för den binära punkten vara b (i ditt exempel är det 3). Låt den första biten från MSB som är 1 vara p (I ditt exempel är det 6). Låt exponenten vara e. 3. Mantissa Detta kommer att vara lika med bitarna från position p-1 ner till bit 0. Hur representerar 0.148 2 i normaliserad flytpunktsräkning med formatet (0.148) (0.00100101111.) 2 Vi skifter det 3 bitar till vänster för att göra det normaliserade (1.00101111) 2 2. Exponent 1164 (75) (1001011) 2 och Mantissa (01001111) 2. Så är flytande punktrepresentation (0100101100101111) 2 (4B2F) Representation A Men om vi lagrar denormaliserad mantissa i 8 bitars register, kommer det inte ha lagrats de senaste tre 1s och då skulle mantissa ha normaliserat från (0.00100101) 2 till (1.00101000 ) 2 genom att sätta in 3 0 istället för 1s. Representationen skulle ha varit (0100101100101000) 2 (4B28) Representation B Så när man normaliserar tar processorn hänsyn till de denormaliserade mantissabitarna bortom 8 bitar eller bara rundar av den Vilken är korrekt: A eller B Lagrar den mantissa i fast punktrepresentation Hur fungerar det hela Jag försöker hjälpa någon med några läxor och jag får felaktiga svar. Frågan är detta: Represent -0.10937510 i normaliserad flytpunktsrepresentation med en 5-bitars fraktional två-komplement-mantissa och en 3-bitars heltal med komplementexponent. Jag har skrivit följande anteckningar: Låt oss lösa svaret på frågan: -0.10937510 Steg 1: Konvertera till binärt. 0 0. 0 0 0 1 1 1 0 0 Steg 2: Multiplicera med 1 (20) - (00.00011100) 2 x 20 Steg 3: Skift för att göra mantissa hela nummer Vi måste göra 6 skift till vänster Varför Eftersom 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 Därför får vi, - (1112) x 2 (-6) Steg 4: Konvertera mantissa. I den här frågan blev vi ombedd att konvertera till två stycken fraktion. Därför måste vi konvertera 111 till två komplement och göra den här 5 bitarna. Steg A: Konvertera till en komplement (5 bit) -00111 11000 Steg B: Konvertera till twos komplement (5-bit) 11000 00001 110012 Steg 5: Konvertera exponent topp 2-bitars komplement 2 (-6) Därför måste vi konvertera -6 till binärt (två komplement) Steg A: Konvertera till binärt 1 1 0 Steg B : Konvertera till en komplement (3-bit) 110 001 Steg C: Konvertera till två komplement 010 Svaret är då, 11001 0102 Som du kan se verkar 2-6 fel för ett 3-bitars komplement. Kan någon påpeka vad jag skulle göra fel Vanligtvis är signifikanten (inte mantissa 1) förskjuten så den viktigaste enbiten är i en viss position, inte så signalen är ett heltal. IEEE 754-formatet normaliserar significand till 1. dddd. där varje d är en siffra i basen som används. Om du ändrar ditt värde för att flytta den första ena till den positionen får du en exponent på 4. Du skulle ha 1.110 2 2 4. För att representera significand i två komplement lägger vi till en annan bit till vänster och producerar 01.110 2 2 4. och sedan Applicera negationen för att ge 10,010 för significand och 100 för exponenten. Det kan emellertid vara viss variation på detaljer. Significeras signifikansen till 1. dddd eller .1 dddd. Är significand fem bitar innan du lägger till en teckenbit eller efter Har du exempel på värden med kända representationer i detta format Eller mer information om formatet 1 Significand är den föredragna termen. En significand är linjär en mantissa är logaritmisk. Flöjtpunktsrepresentation 8211 Basics Det finns inlägg på representation av flytpunktsformat. Syftet med denna artikel är att ge en kort introduktion till flytpunktsformat. Följande beskrivning förklarar terminologi och primära detaljer för binär flytpunktsrepresentation i IEEE 754. Diskussionen begränsar sig till enkla och dubbla precisionsformat. Vanligtvis kommer ett riktigt antal i binär att representeras i följande format, där I m och Fn kommer att vara antingen 0 eller 1 av heltal respektive fraktioner. Ett ändligt tal kan också representeras av fyra heltalskomponenter, ett tecken, en bas (b), en significand (m) och en exponent (e). Därefter utvärderas numrets numeriska värde som (-1) s x m x b e Var m lt b I beroende av bas och antal bitar som används för att koda olika komponenter definierar IEEE 754-standarden fem grundläggande format. Bland de fem formaten är binary32- och binary64-formaten enstaka precision och dubbla precisionsformat, där basen är 2. Tabell 8211 1 Precisionspresentation Enkelt precisionsformat: Som nämnts i tabell 1 har det ena precisionsformatet 23 bitar för significand ( 1 representerar underförstådd bit, detaljer nedan), 8 bitar för exponent och 1 bit för tecken. Till exempel kan det rationella talet 92 omvandlas till enkel precision floatformat som följer. Resultatet sägs vara normaliserat. om den representeras med ledande 1 bit, dvs 1,001 (2) x 2 2. (Likaså när numret 0.000000001101 (2) x 2 3 normaliseras, verkar det som 1,101 (2) x 2 -6). Att utelämna detta underförstådda 1 på vänster extremt ger oss mantiten av flottörenummer. Ett normaliserat nummer ger mer noggrannhet än motsvarande de-normaliserade talet. Den implicita mest signifikanta biten kan användas för att representera ännu mer exakt significand (23 1 24 bitar) som kallas subnormal representation. De flytande punktnumren ska representeras i normaliserad form. De subnormala talen faller i kategorin av-normaliserade tal. Den subnormala representationen minskar något exponentområdet och kan inte normaliseras eftersom det skulle resultera i en exponent som inte passar in i fältet. Subnormala tal är mindre noggranna, d. v.s. de har mindre utrymme för nonzero bitar i fraktionsfältet än normaliserade nummer. I själva verket faller noggrannheten när storleken på det subnormala antalet minskar. Den subnormala representationen är emellertid användbar vid arkivering av luckor med flytpunktsskala nära noll. Med andra ord kan ovanstående resultat skrivas som (-1) 0 x 1.001 (2) x 2 2 vilket ger heltalskomponenterna som s 0, b 2, significand (m) 1.001, mantissa 001 och e 2. Den motsvarande Enkelt precision flytande tal kan representeras i binär som visas nedan, där exponentfältet ska vara 2, men kodat som 129 (1272) kallad förspänd exponent. Exponentfältet är i vanligt binärt format som också representerar negativa exponenter med en kodning (liknande teckenstorlek, 1s komplimang, 2s komplement, etc.). Den förspända exponenten används för representation av negativa exponenter. Den förspända exponenten har fördelar jämfört med andra negativa representationer vid utförande av bitvis jämförelse av två flytande punkttal för jämlikhet. En bias av (2 n-1 8211 1), där n är bitar som används i exponent, läggs till exponenten (e) för att få förspänd exponent (E). Så kan den förspända exponenten (E) för enkel precisionsnummer erhållas, eftersom Exponentintervallet i enkel precisionsformat är -126 till 127. Andra värden används för speciella symboler. Obs! När vi packar upp ett flytpunktsnummer erhålles exponent som är förspänd exponent. Subtrahera 127 från den förspända exponenten vi kan extrahera objektiv exponent. Dubbel precisionsformat: Såsom nämnts i tabell 1 har dubbla precisionsformatet 52 bitar för significand (1 representerar implicerad bit), 10 bitar för exponent och 1 bit för tecken. Alla andra definitioner är desamma för dubbla precisionsformat, förutom storleken på olika komponenter. Den minsta förändringen som kan representeras vid flytpunktsrepresentation kallas som precision. Den fraktionerade delen av ett enda precisionsnormaliserat antal har exakt 23 bitars upplösning (24 bitar med den implicita biten). Detta motsvarar loggen (10) (2 23) 6 924 7 (kännetecknen för logaritmen) decimala siffror med noggrannhet. På liknande sätt, i fall av dubbel precisionsnummer är precisionen logg (10) (2 52) 15 654 16 decimala siffror. Noggrannhet i flytpunktsrepresentationen styrs av antalet signifikanta bitar, medan intervallet begränsas av exponent. Inte alla reella tal kan exakt representeras i flytpunktsformat. För varje nummer som inte är flytande punktnummer finns det två alternativ för flytpunktsimetration, säg närmaste flytpunktsnummer mindre än x som x och närmaste flytpunktsnummer som är större än x som x. En avrundningsoperation utförs på antal signifikanta bitar i mantissa-fältet baserat på det valda läget. Runda nerläget orsakar x inställt på x, runda uppläget orsakar x inställt på x, runda mot nollläge orsakar x är antingen x eller x beroende på vilket som är mellan noll och. Runda till närmaste lägessätt x till x eller x beroende på vilket som är närmast x. Vanligtvis runt till närmaste är mest använda läget. Närheten av flytpunktsrepresentation till det verkliga värdet kallas som noggrannhet. Speciella bitmönster: Standarden definierar några speciella flytmåttbitmönster. Noll kan inte ha mest signifikanta 1 bit, och kan därför inte normaliseras. Den dolda bitrepresentationen kräver en speciell teknik för lagring av noll. Vi kommer att ha två olika bitmönster 0 och -0 för samma numeriska värde noll. För enkelriktad flytpunktsrepresentation anges dessa mönster nedan, 0 00000000 00000000000000000000000 0 1 00000000 00000000000000000000000 -0 På samma sätt representerar standarden två olika bitmönster för INF och - INF. Detsamma anges nedan, 0 11111111 00000000000000000000000 INF 1 11111111 00000000000000000000000 - INF Alla dessa specialnummer samt andra specialnummer (nedan) är subnormala, representerade genom användning av ett speciellt bitmönster i exponentfältet. Detta minskar exponeringsområdet något, men det är ganska acceptabelt eftersom intervallet är så stort. Ett försök att beräkna uttryck som 0 x INF, 0 INF etc. ger ingen matematisk mening. Standarden kallar resultatet av sådana uttryck som Inte ett nummer (NaN). Eventuellt efterföljande uttryck med NaN ger NaN. Representationen av NaN har icke-noll significand och alla 1s i exponentfältet. Dessa visas nedan för enkel precisionsformat (x bryr sig inte), x 11111111 1 m 0000000000000000000000 Där m kan vara 0 eller 1. Detta ger oss två olika representationer av NaN. 0 11111111 110000000000000000000000 Signalering NaN (SNaN) 0 11111111 100000000000000000000000 Tyst NaN (QNaN) Vanligtvis används QNaN och SNaN för felhantering. QNaN ger inga undantag eftersom de sprids genom de flesta operationer. SNaN är som när de konsumeras av de flesta verksamheterna kommer att ge upphov till ett ogiltigt undantag. Överflöde och underflöde: Överflödet sägs uppstå när det sanna resultatet av en aritmetisk operation är begränsad men större än den största flytpunkten som kan lagras med den angivna precisionen. Underflödet sägs inträffa när det sanna resultatet av en aritmetisk operation är mindre i storlek (oändlig) än det minsta normaliserade flytpunkten som kan lagras. Överflöde kan inte ignoreras i beräkningar medan underflöde effektivt kan ersättas med noll. IEEE 754-standarden definierar ett binärt flytpunktsformat. Arkitekturinformationen lämnas till maskinvaruföretag. Lagringsordningen för enskilda byte i binärt flytpunktsnummer varierar från arkitektur till arkitektur. Tack till Venki för att skriva ovanstående artikel. Vänligen skriv kommentarer om du hittar något fel eller vill dela mer information om ämnet som diskuterats ovan.

No comments:

Post a Comment