Floating Point Numbers Real Numbers. pi 3,14159265. e 2,71828. Vetenskaplig notering: har en enda siffra till vänster om decimalpunkten. Ett nummer i Scientific Notation utan ledande 0s heter ett normaliserat nummer: 1,0 gånger 10-8 Inte i normaliserad form: 0,1 gånger 10 -7 eller 10,0 gånger 10 -9 Kan också representera binära tal i vetenskaplig notation: 1,0 gånger 2 -3 Datorräkning som stöder sådana nummer heter Floating Point. Formuläret är 1.xxxx133 gånger 2 yy133 Använda normaliserad vetenskaplig notering Förenklar utbytet av data som innehåller flytande punkttal Förenklar de aritmetiska algoritmerna för att veta att siffrorna alltid kommer att vara i den här formen Förbättrar noggrannheten i de nummer som kan lagras i ett ord , eftersom varje onödig ledande 0 ersätts av en annan signifikant siffra till höger om decimaltaletRepresentation of Floating Point-nummer -1 S gånger M gånger 2 E 177 10 -308. 10 308 Dessa format heter. IEEE 754 Floating Point Standard Eftersom mantissa alltid är 1.xxxxxxxxx i normaliserad form behöver du inte representera den ledande 1. Så effektivt: Enkel precision: mantissa 1 bit 23 bitDouble Precision: mantissa 1 bit 52 bitsSince noll (0.0) har ingen ledande 1, för att skilja den från andra, ges den reserverade bitpattern alla 0s för exponent så att hårdvara kommer inte att fästa en ledande 1 till den. Således: Andra siffror -1 S gånger (1 Mantissa) gånger 2 E Om vi numrerar mantissabitarna från vänster till höger m1, m2, m3. mantissa m1 gånger 2 -1 m2 gånger 2 -2 m3 gånger 2 -3. Negativa exponenter kan utgöra ett problem i jämförelser. Till exempel (med två komplement): Verkliga nummer: Flytande siffror Under medeltiden ansågs människor som lämnades över att vissa skulle vara onda, en negativ synvinkel. Så om du glömmer vilket sätt att flytta decimaltalet flyttar negativa exponenter till vänster. Medan positiva exponenter rör sig rätt Om du studerar andra ämnen som fysik eller kemi kan du komma över flytande punktnummer som här. Den första delen definierar den icke-nolldelen av numret och kallas Mantissa. Den andra delen definierar hur många positioner vi vill flytta decimalpunkten, det här kallas exponent och kan vara positivt när vi flyttar decimalpunkten till höger och negativ när vi flyttar till vänster. 6,63 M antissa 10 34 E xponent underbrace Mantissaend tider underbrace Exponentend Om du ville skriva ut det numret i sin helhet skulle du behöva flytta decimaltalet i exponenten 34 ställen till vänster vilket resulterar i: Vilket skulle ta mycket tid att skriva och är mycket svårt för det mänskliga ögat att se hur många nollor det finns. Därför kan vi, när vi kan acceptera en viss nivå av noggrannhet (6,63 3 signifikanta siffror), lagra ett stort antal siffror som plankor konstant i ett fåtal siffror. Du väger alltid räckvidden (eller intervallet) av numret mot dess noggrannhet (antal signifikanta bitar). Samma sak gäller binära siffror och är ännu viktigare. När du hanterar siffror och deras beräkningsrepresentation måste du alltid vara medveten om hur mycket utrymme siffrorna tar upp i minnet. Som vi såg med ovanstående exempel kan en icke-flytande punktrepresentation av ett tal ta upp ett otillåtet antal siffror, tänk hur många siffror du skulle behöva lagra 0.00 000 000 000 000 000 000 000 000 000 000 000 663 i binär A binär flytpunkten kan bestå av 2, 3 eller 4 byte, men de enda du behöver oroa dig för är 2 byte (16 bit) sorten. De första 10 bitarna är Mantissa, de sista 6 bitarna är exponent. Precis som den flytande punktrepresentationen, kommer ett binärt flytpunktsnummer att ha en mantissa och en exponent, men när du hanterar binär (bas 2) måste du komma ihåg att istället för att ha 10 x y måste du använda 2 x y. Varför använda binära flytpunktsnummer Redigera Bipunkts binär låter en dator hålla fraktioner, men på grund av dess natur är det väldigt begränsat i sin omfattning. Även med 4 byte för att hålla varje nummer, med 8 bitar för den delade delen efter punkten, är det största antalet som kan hållas på drygt 8 miljoner. Ett annat format behövs för att hålla mycket stora tal. I decimal kan mycket stora siffror visas med en mantissa och en exponent. d. v.s. 0,1210 Här är 0.12 mantiten och 10 är exponenten. Mantitan har de viktigaste siffrorna och exponenterna definierar var decimalpunkten ska placeras. Samma teknik kan användas för binära tal. Till exempel kan två byte delas så att 10 bitar används för mantissen och de återstående 6 för exponenten. Detta möjliggör ett mycket större antal siffror att använda. Konvertera binär flytpunkt till decimal Redigera Det finns flera steg att ta när man arbetar med ett flytpunktsnummer i binärt. Faktum är att det är mycket som en disco dansrutin - känd på denna sida som Noorgat Dance, Kemp variant (du kommer inte bli testad på namn men det borde hjälpa dig att komma ihåg) Signera - hitta tecknet på mantissen (notera detta) Slide - hitta värdet på exponenten och om det är positivt eller negativt Bounce - flytta decimalen avståndet som exponent frågar, vänster för en negativ exponent, rätt för en positiv om Flytta vänster och är positivt tal, sedan pad med nollor Om flytta vänster och är negativt tal, sedan paddla med dem Flip - Om mantiten är negativ, utför två komplement på den. Simma - börja med decimalpunkten träna ut mantissens värden, gå till vänster och sedan höger. Se till att du hänvisar till tecknet du spelade in på teckenfönstret. Exempel: binär flytpunkt fungerat exempel Vi kan prova det. Vi får följande 16 bitars flytande punktnummer, med 10 bitar för mantissen och 6 bitar för exponenten. Kom ihåg att decimalpunkten är mellan de första och näst mest signifikanta bitarna. Den första åtgärden vi behöver utföra är tecknet. ta reda på tecknet på mantissan Det andra steget i Noorgat dansen är bilden. vi måste hitta värdet av exponenten, det vill säga de sista 6 bitarna av numret. Det tredje steget i Noorgat-dansen är den studsa som flyttar decimalpunkten för Mantissa antalet positioner som anges av bilden, vilket var en position till höger. Liksom så: Det fjärde steget är valfri flip. Kolla tillbaka till skyltstadiet och se om Mantissa är negativ. Det är inte okej, du kan hoppa över det här steget då vi bara bläddra numret om mantiten är negativ. Det femte och sista steget är simmen. Med själva mantiten kan vi nu utgå från värdet på flytpunkten. Börja i mitten och märka varje nummer till vänster 1. 2. 4. 8. 16 och så vidare. Varje nummer till höger 1 2. 1 4. 1 8. 1 16,, och så vidare. Övning: Enkel binär flytpunkt.3.10.1. Grunderna Flyttpunkten ligger runt begränsningarna av fast punkt genom att använda ett format som liknar vetenskaplig notering. Ett vetenskapligt notationsnummer består av en mantissa (3,52 i exemplet ovan) en radix (alltid 10) och en exponent (3 i exemplet ovan). Därför är det allmänna formatet för ett vetenskapligt noteringsvärde: mantissa x radix exponent Den normaliserade formen har alltid en mantissa som är större än eller lika med 1,0 och mindre än 10,0. Vi kan deformalisera värdet och uttrycka det på många andra sätt, såsom 35.2 x 10 2. eller 0.00325 x 10 0. För varje position skifter vi siffrorna i mantiten i förhållande till decimalpunkten, vi ökar eller sänker värdet på mantissa med en faktor 10. För att kompensera för detta ökar eller minskar exponenten enkelt med 1. Denormalisering är nödvändig när man lägger till vetenskapliga noteringsvärden: Justering av mantissa och exponent är också ibland nödvändig för att normalisera resultaten. Till exempel är 9,9 x 10 2 9,9 x 10 2 19,8 x 10 2. som måste normaliseras till 1,98 x 10 3. Ett binärt flytande system lagrar en signerad binär mantissa och en signerad binär exponent och brukar använda en radix av 2. Med hjälp av en radix av 2 (eller någon kraft av 2) kan vi normalisera och denormalisera genom att flytta de binära siffrorna i mantiten och justera heltalsexponenten på radix av 2. (Skiftande binära siffror i mantissa n-bitarna till vänster eller höger multiplicerar eller delar upp mantiten med 2 n.) 00010 2 x 2 3 01000 2 x 2 1. Standardformat för flytande punkt definieras av IEEE-samhället. IEEE-formaten är något mer komplexa som behövs för att förstå flytpunkten i allmänhet, så vi börjar med ett enklare exempel här. 3.10.2.A Simple Floating Point Format Anta att ett 32-bitars flytpunktsformat har en 24-bitars twos-komplementmantissa, en 8-bitars två-komplementexponent och en radix av 2. Den allmänna strukturen är: mantissa x 2-exponent där mantissa är ett 24-bitars komplement integer, och exponent är ett 8-bitars komplement heltal. Det binära formatet är enligt följande: Tabell3.3.Flödespostformat Vad är värdet av följande nummer Mantissa är 000000000000000000010010 eller (2 16) 18. Exponenten är 11111100 - (00000011 1) -00000100 -4. Värdet är därför 18 x 2 -4 Vad är det största positiva värdet vi kan representera i detta system Det största positiva värdet kommer att bestå av den största positiva mantiten och den största positiva exponenten. Den största mantiten är 01111111111111111111111111, vilken i två komplement är 2 23 -1 (8388607). Den största exponenten är 01111111, som i två komplement är 2 7 -1 (127). Därför är det största positiva värdet 8388607 x 2 127 1,42 x 10 45. Vad är det näst största positiva värdet Vad är skillnaden mellan det största och näst största Vad är det minsta positiva värdet Att hitta det minsta positiva värdet i form mantissa x radix exponent. vi väljer den minsta positiva mantiten och den minsta negativa exponenten (den negativa exponenten med störst magnitud). Eftersom mantissa är ett heltal är det minsta möjliga positiva värdet 1. Eftersom exponenten är ett 8-bitars twos komplementvärde är den minsta negativa exponenten 10000000 2. av -27 -128. Därför är det minsta positiva värdet 1 x 2 -128. eller 2,93873587706 x 10 -39. Vad är det andra minsta positiva värdet Vad är skillnaden mellan den minsta och näst minsta representanten -2.75 i detta flytpunktssystem. Omvandla numret till fixpunkts binärt med hjälp av de metoder som beskrivs i tidigare avsnitt: Multiplicera med radix exponent lika med 1: Skift den binära punkten för att göra mantiten ett heltal: - (1011 2) Genom att flytta binärpunkten två ställen till höger multiplicerar vi mantiten med 2 2. Vi måste därför dela (radix exponent) med samma faktor: Konvertera mantissa och exponent i de angivna formaten (två komplement i det här fallet): Mantissa: - (000000000000000000001111) 111111111111111111110101 Exponent: -2 10 11111110 Binär representation 1111111111111111111010111111111110 Hur många olika värden kan detta system representera 3.10.3. Överflöde och underflödesöverflöde uppstår när Resultatet av en flytpunktsoperation är större än det största positiva värdet, eller mindre än det minsta negativa värdet. Med andra ord är storleken för stor för att representera. Underflöde uppstår när resultatet av en flytpunktsoperation är mindre än det minsta positiva värdet eller större än det största negativa värdet. Med andra ord är storleken för liten för att representera. Exemplet 32-bitarsformat ovan kan inte representera värden större än omkring 10 45 eller mindre än ca 10 -39. En teknik för att undvika överflöde och underflöde är att alternativa operationer som ökar och minskar mellanresultat. I stället för att göra alla multiplikationer först, vilket kan orsaka överflöde eller alla divisioner först, vilket kan orsaka underflöde, kunde vi byta multiplikationer och uppdelningar för att mäta resultaten längs vägen. Tekniker som dessa måste ofta användas i komplexa vetenskapliga beräkningar. 3.10.4.Kost av flytande punkt Allt kostar. Det ökade intervallet och förmågan att representera icke-heltal är inget undantag. Det finns bara 2 32 mönster av 32 0s och 1s. Därför finns det bara 2 32 unika nummer som vi kan representera i 32 bitar, oavsett format. Så hur är det vi kan representera nummer upp till 10 45. Självklart måste vi offra något däremellan. Vilket flytande punkt gör för oss sprids ut det begränsade antalet binära mönster vi har tillgång till för att täcka ett större antal nummer. Ju större exponenten är desto större är klyftan mellan på varandra följande siffror som vi kan representera exakt. Nära 0 kan vi representera många nummer i ett litet sortiment. Långt från noll kommer det att finnas ett stort antal heltal som inte kan representeras. Precisionen för ett 32-bitars flytpunktvärde är mindre än precisionen för ett 32-bitars heltal. Genom att använda 8 bitar för exponenten offrar vi de 8 bitarna av precision. Därför har vårt exempelformat samma precision som ett 24-bitars signerat heltalssystem. Prestationsräkningar på flytpunkten är flera gånger långsammare än på heltal. Detta är en inneboende egenskap av formatet. Tänk på processen att lägga till två vetenskapliga noteringsvärden. Utjämna exponenterna Lägg till mantissorna Normalisera resultatet Varje av dessa åtgärder tar ungefär samma tid i en dator som ett enda heltalstillägg. Eftersom flytpunkten lagras som vetenskaplig notation, kan vi förvänta oss flytande punkttillägg för att ta ungefär tre gånger så länge som heltalstillägg. I själva verket tar en typisk dator ungefär 2,5 gånger så lång tid att utföra en flytande punkträknad instruktion som den gör för att göra samma heltalsinstruktion. Observera att detta endast gäller operationer som kan utföras med hjälp av antingen en heltalsinstruktion eller en enskild flytpunktsinstruktion. Antag att ett program körs på en 32-bitars dator, och det finns inget sätt att representera data inom intervallet av ett 32-bitars heltal. I det här fallet krävs flera heltalsinstruktioner för att bearbeta heltalsvärden på mer än 32 bitar, och hastighetsfördelen av heltal gäller inte. Det är också möjligt i vissa system att flytpunkt och heltalsoperationer kan uppstå samtidigt, och därigenom utnyttjande av flytpunkten kan hårdvaran resultera i bättre prestanda än att utföra ytterligare heltalstransaktioner medan flytpunktenheten sitter i viloläge. Detta är fallet med grafisk återgivning som sker med hjälp av flytpunkten på grafikbehandlingsenheten (GPU) snarare än CPU. Det vore inte meningsfullt att flytta reningsberäkningarna till CPU-enheten för att kunna använda heltal eftersom det bara skulle öka arbetsbelastningen för CPU-enheten och låta GPU: s kraft gå på spill. Om maskinvaran har inbyggd flytpunktsstöd, kan gemensamma operationer som tilläggsflöde, subtraktion etc. hanteras med en enda instruktion. Om hårdvaran inte har en flytpunktsenhet (vanligt i inbäddade processorer) måste flytpunktsoperationer hanteras av programrutiner. Därför behöver två dygnvärden kräva dussintals instruktioner att slutföra istället för bara en. Dessa kommer att vara hundratals gånger långsammare än heltal, och kommer att förbruka en stor del av tillgängligt programminne. De flesta algoritmer kan implementeras med hjälp av heltal med lite tanke. Användning av flytpunkten är ofta resultatet av ren lathet. Använd inte flytpunkten bara för att den är intuitiv. Mer strömförbrukning. CPU: er uppnår maximal strömförbrukning vid intensiva flytpunktsberäkningar. Det här brukar inte märkas på en stationär dator, men kan bli ett problem på stora nät som består av hundratals datorer, eftersom det elnät de är anslutna till kanske inte är konstruerade för att ge maximal räckvidd. Det kan också vara ett problem när du kör en bärbar dator på batteriet medan du gör intensiva beräkningar. Batterilivslängd medan du gör intensiva flytpunktsberäkningar kan vara en liten del av vad det är när du läser e-post, surfar på webben eller redigerar ett dokument i OpenOffice.
No comments:
Post a Comment