Wisselpuntgetalle reële getalle. pi 3,14159265. e 2,71828. Wetenskaplike notasie: 'n enkele syfer aan die linkerkant van die desimale punt. 'N Aantal in wetenskaplike notasie met geen leidende 0'e word 'n Genormaliseerde nommer: 1.0 keer 10 -8 Nie in genormaliseerde vorm: 0.1 keer 10 -7 of 10,0 keer 10 -9 Kan ook binêre getalle in wetenskaplike notasie verteenwoordig: 1.0 keer 2 -3 rekenaar rekenkundige dat sulke getalle ondersteun genoem wisseltrofee Point. Die vorm is 1.xxxx133 keer 2 yy133 Gebruik genormaliseer wetenskaplike notasie vergemaklik die uitruil van data wat swaai-punt numbersSimplifies sluit die rekenkundige algoritmes om te weet dat die getalle altyd sal wees in hierdie die akkuraatheid van die syfers wat kan gestoor word in 'n woord formIncreases , aangesien elke onnodige voorste 0 vervang deur 'n ander beduidende syfer aan die regterkant van die desimale pointRepresentation van drywende-Point nommers -1 S keer M keer 2 E 177 10 -308. 10 308 Hierdie formate word genoem. IEEE 754 swaai komma Standard Sedert die MANTISSA is altyd 1.xxxxxxxxx in die genormaliseerde vorm, nie nodig om die voorste 1 verteenwoordig. So, doeltreffend: Enkellopend Precision: MANTISSA 1 bietjie 23 bitsDouble Precision: MANTISSA 1 bietjie 52 bitsSince nul (0.0) het geen leidende 1, om dit te onderskei van ander, is dit gegee die voorbehou bitpattern al 0s vir die eksponent sodat hardeware gewoond heg 'n leidende 1 tot dit. Dus: Ander nommers -1 S keer (1 MANTISSA) keer 2 E As ons tel die MANTISSA stukkies van links na regs M1, M2, M3. MANTISSA m1 keer 2 -1 m2 keer 2 -2 m3 keer 2 -3. Negatiewe eksponente kan 'n probleem wees in vergelyking. Byvoorbeeld (met twee-twee aan te vul): 3.10.1.The Basics Floating punt kry om die beperkinge van vaste punt met behulp van 'n formaat soortgelyk aan wetenskaplike notasie. 'N wetenskaplike notasie nommer, soos u waarskynlik weet, bestaan uit 'n MANTISSA (3.52 in die voorbeeld hierbo) 'n radix (altyd 10), en 'n eksponent (3 in die voorbeeld hierbo). Vandaar die algemene formaat van 'n wetenskaplike notasie waarde is: MANTISSA x Radix eksponent Die genormaliseerde vorm was nog altyd 'n MANTISSA groter as of gelyk aan 1,0, en minder as 10,0. Ons kan die waarde denormalize en druk dit in baie ander maniere, soos 35,2 x 10 2. of 0,00325 x 10 0. Vir elke posisie wat ons skuif die syfers van die MANTISSA relatief tot die desimale punt het ons verhoog of die waarde van die afneem MANTISSA met 'n faktor van 10. om te vergoed vir hierdie, ons het eenvoudig verhoog of die eksponent verminder deur 1. Denormalizing is nodig wanneer die toevoeging van wetenskaplike notasie waardes: die MANTISSA aanpassing en eksponent is ook soms nodig om resultate te normaliseer. Byvoorbeeld, 9.9 x 10 2 9.9 x 10 2 is 19.8 x 10 2. wat moet genormaliseer tot 1,98 x 10 3. 'n binêre drywende stelsel stoor 'n getekende binêre MANTISSA en 'n getekende binêre eksponent, en gewoonlik gebruik 'n radix van 2. met behulp van 'n radix van 2 (of enige bevoegdheid van 2) stel ons in staat om te normaliseer en denormalize deur die verskuiwing van die binêre syfers in die MANTISSA en aanpassing van die heelgetal eksponent van die radix van 2. (Shifting binêre syfers in die MANTISSA n stukkies aan die linkerkant of reg vermeerder of verdeel die MANTISSA deur 2 n.) 00010 2 x 2 3 01000 2 x 2 1. die standaard drywende punt formate word bepaal deur die IEEE samelewing. Die IEEE formaat is effens meer kompleks wat nodig is om te verstaan drywende punt in die algemeen, so ons sal begin met 'n eenvoudiger voorbeeld hier. 3.10.2.A Eenvoudige wisseltrofee puntsgewys Veronderstel 'n 32-bit floating point formaat het 'n 24-bis twees te vul MANTISSA, 'n 8-bis twees te vul eksponent, en 'n radix van 2. Die algemene struktuur is: MANTISSA x 2 eksponent Waar MANTISSA is 'n 24-bis twees te vul heelgetal, en eksponent is 'n 8-bis twees te vul heelgetal. Die binêre formaat is as volg: Table3.3.Floating puntsgewys Wat is die waarde van die volgende getal die MANTISSA is 000000000000000000010010, of (2 16) 18. Die eksponent is 11111100 - (00000011 1) -00000100 -4. Die waarde is dus 18 x 2 -4 Wat is die grootste positiewe waarde wat ons kan verteenwoordig in hierdie stelsel die grootste positiewe waarde sal bestaan uit die grootste positiewe MANTISSA en die grootste positiewe eksponent. Die grootste MANTISSA is 011111111111111111111111, wat twee-twee aanvulling is 2 23 -1 (8388607). Die grootste eksponent is 01111111, wat twee-twee aanvulling is 2 7 -1 (127). Dus, die grootste positiewe waarde is 8388607 x 2 127 1.42 x 10 45. Wat is die tweede grootste positiewe waarde Wat is die verskil tussen die grootste en naasgrootste Wat is die kleinste positiewe waarde aan die kleinste positiewe waarde in die vorm MANTISSA vind x radix eksponent. Ons kies die kleinste positiewe MANTISSA, en die kleinste negatiewe eksponent (die negatiewe eksponent met die grootste omvang). Sedert die MANTISSA 'n heelgetal is, die kleinste positiewe waarde moontlik is 1. Aangesien die eksponent is 'n 8-bis twees te vul waarde, die kleinste negatiewe eksponent is 10000000 2. van -2 7 -128. Vandaar die kleinste positiewe waarde is 1 x 2 -128. of 2,93873587706 x 10 -39. Wat is die tweede kleinste positiewe waarde Wat is die verskil tussen die kleinste en tweede kleinste Stel -2,75 in hierdie drywende punt system. Convert die aantal vaste punt binêre met behulp van die in die vorige afdelings beskryf metodes: Vermenigvuldig met Radix eksponent gelyk aan 1: Shift die binêre punt om die MANTISSA maak 'n hele aantal: - (1011 2) met die verskuiwing van die binêre punt twee plekke na regs, vermenigvuldig ons die MANTISSA deur 2 2. ons moet dus verdeel (radix eksponent) deur dieselfde faktor: Skakel die MANTISSA en eksponent in die gespesifiseerde formaat (twees aanvulling in hierdie geval): MANTISSA: - (000000000000000000001011) 111111111111111111110101 Exponent: -2 10 11111110 Binary verteenwoordiging 11111111111111111111010111111110 Hoeveel verskillende waardes kan hierdie stelsel verteenwoordig 3.10.3.Overflow en onderloop Oorloop vind plaas wanneer die gevolg van 'n drywende punt werking is groter as die grootste positiewe waarde, of kleiner as die kleinste negatiewe waarde. Met ander woorde, die grootte is te groot om te verteenwoordig. Onderloop vind plaas wanneer die uitslag van 'n drywende punt werking is kleiner as die kleinste positiewe waarde, of groter as die grootste negatiewe waarde. Met ander woorde, die grootte is te klein om te verteenwoordig. Die voorbeeld 32-bit-formaat kan bo nie verteenwoordig waardes groter as ongeveer 10 45 of kleiner as ongeveer 10 -39. Een tegniek om oorloop en onderloop vermy is om alternatiewe bedrywighede wat verhoog en intermediêre resultate te verminder. Eerder as om te doen al die vermenigvuldiging eerste, wat oorloop, of al die afdelings eerste kan veroorsaak, wat onderloop kan veroorsaak, kan ons alternatiewe vermenigvuldig en deel te modereer die resultate langs die pad. Tegnieke soos hierdie moet dikwels gebruik word in komplekse wetenskaplike berekeninge. 3.10.4.Cost van drywende Point Alles het 'n koste. Die verhoogde reeks en die vermoë om nie-heelgetalle verteenwoordig is geen uitsondering nie. Presisie Daar is slegs 2 32 patrone van 32 0e en 1e. Dus, daar is net 2 32 unieke nommers wat ons kan verteenwoordig in 32 stukkies, ongeag die formaat. So, hoe is dit ons kan getalle verteenwoordig tot 10 45. Dit is duidelik dat ons moet offer iets tussenin. Wat dryf punt vir ons doen is versprei die beperkte aantal binêre patrone wat ons beskikbaar het om 'n groter verskeidenheid van getalle te dek. Hoe groter die eksponent, hoe groter die gaping tussen opeenvolgende getalle wat ons akkuraat kan verteenwoordig. Naby aan 0, kan ons baie getalle verteenwoordig in 'n klein reeks. Ver van nul, sal daar 'n hele reeks van heelgetalle wat nie kan voorgestel word. Die presisie van 'n 32-bit floating point waarde is minder as die akkuraatheid van 'n 32-bis integriteit. Deur die gebruik van 8 bisse vir die eksponent, ons offer diegene 8 stukkies presisie. Dus, ons voorbeeld formaat het dieselfde akkuraatheid as 'n 24-bit onderteken heelgetal stelsel. Prestasie Rekenkundige op drywende punt is 'n paar keer stadiger as op heelgetalle. Dit is 'n inherente eienskap van die formaat. Kyk na die proses van die toevoeging van twee wetenskaplike notasie waardes. Gelyk die eksponente Voeg die mantissas normaliseer die gevolg Elkeen van hierdie bedrywighede neem min of meer dieselfde hoeveelheid tyd in 'n rekenaar as 'n enkele heelgetal Daarbenewens. Sedert drywende punt gestoor soos wetenskaplike notasie, kan ons verwag dat drywende punt Benewens sowat drie keer neem so lank as heelgetal Daarbenewens. In werklikheid, 'n tipiese rekenaar neem ongeveer 2,5 keer so lank om uit te voer 'n drywende punt rekenkundige onderrig as dit nie tot dieselfde heelgetal opdrag te doen. Let daarop dat hierdie slegs van toepassing op transaksies wat met behulp van 'n enkele heelgetal instruksie of 'n enkele swaai punt instruksie uitgevoer kan word. Byvoorbeeld, veronderstel 'n program loop op 'n 32-bis rekenaar, en daar is geen manier om die data binne die omvang van 'n 32-bis integriteit verteenwoordig. In hierdie geval, sal verskeie heelgetal instruksies wat nodig is om heelgetalwaardes van meer as 32 stukkies proses wees, en die spoed voordeel van heelgetalle geld nie. Dit is ook moontlik in sommige stelsels wat swaai punt en heelgetal bedrywighede kan voorkom terselfdertyd, en vandaar die gebruik van die drywende punt hardeware kan lei tot 'n beter prestasie as die uitvoering van bykomende heelgetal bedrywighede terwyl die swaai punt eenheid sit ledig. Dit is die geval met grafiese lewering wat plaasvind met behulp van drywende punt op die grafiese verwerking van eenheid (GPU) eerder as die CPU. Dit sou nie sin maak om die lewering berekeninge om die SVE om heelgetalle gebruik te beweeg, aangesien dit slegs die werklas vir die CPU sal verhoog en toelaat dat die krag van die GPU om te gaan om te mors. As hardeware het floating point ondersteuning ingeboude, dan algemene bedrywighede soos drywende punt optel, aftrek, ens kan elke hanteer word deur 'n enkele opdrag. As hardeware nie die geval is 'n drywende punt eenheid (algemeen in ingeboude verwerkers), moet swaai punt bedrywighede hanteer word deur sagteware roetines. Dus, die toevoeging van twee drywende punt waardes sal dekades van instruksies nodig het om te voltooi in plaas van net een. Dit sal honderde kere stadiger as heelgetalle, en sal 'n groot deel van die beskikbare program geheue verbruik. Die meeste algoritmes geïmplementeer kan word met behulp van heelgetalle met 'n bietjie gedink. Gebruik van drywende punt is dikwels die gevolg van blote luiheid. Moenie gebruik drywende punt net omdat sy intuïtiewe. Meer kragverbruik. CPUs bereik hul maksimum kragverbruik wanneer jy intensiewe drywende punt berekeninge. Dit is gewoonlik nie sigbaar op 'n desktop PC, maar kan 'n probleem op 'n groot roosters wat bestaan uit honderde rekenaars word, aangesien die kragnetwerk is hulle aan mag nie ontwerp is om voorsiening te maak vir hul maksimum trekking. Dit kan ook 'n probleem wees as die bestuur van 'n skootrekenaar op battery terwyl hulle intensiewe berekeninge. Battery lewe terwyl hulle intensiewe drywende punt berekeninge kan 'n klein fraksie van wat dit is, terwyl die lees van e-pos, op die web, of 'n dokument in OpenOffice. Float redigering te Desimale Gesprek Die Gesprek Prosedure Die reëls vir die omskakeling van 'n drywende punt nommer in desimale is nie eenvoudig om te keer van die desimale te swaai punt omskakeling: As die oorspronklike getal is in hex, skakel dit om na binêre. Skei in die teken, eksponent en MANTISSA velde. Pak die MANTISSA van die veld MANTISSA, en die herstel van die voorste een. Jy kan ook laat die sleep nulle. Pak die eksponent van die veld eksponent, en trek die vooroordeel aan die werklike eksponent van twee herstel. Soos tevore, die vooroordeel is 2 k minus1 minus 1, waar k die aantal bisse in die veld eksponent, gee 3 vir die 8-bis-formaat en 127 vir die 32-bit. De-normaliseer die nommer: beweeg die binêre punt so die eksponent is 0, en die waarde van die getal onveranderd. Skakel die binêre waarde desimaal. Dit word gedoen net soos met binêre heelgetalle, maar die plekwaarde regterkant van die binêre punt is breuke. Stel die teken van die desimale getal volgens die wonderteken bietjie van die oorspronklike swaai punt nommer: maak dit negatief vir 1 verlaat positief vir 0. As die binêre eksponent is baie groot of klein, kan jy die MANTISSA direk na desimale omskep sonder de - normaliseer. Gebruik dan 'n sakrekenaar om twee in te samel om die eksponent, en voer die vermenigvuldiging. Dit sal 'n geskatte antwoord gee, maar is voldoende in mees gevalle. Voorbeelde Die gebruik van Die Gesprek Prosedure Skakel die 8-bit floating point nommer E7 (in blok) om desimaal. Skakel: E7 16 11100111 2. Seprate: 1 110 0111 MANTISSA: 1,0111 Exponent: 110 2 6 10 6 minus 3 3. De-normaliseer: 1,0111 2 keer 2 3 1011,1 Skakel: Desimale te swaai komma Converter oor die desimale te swaai komma Converter Dit is 'n desimale te binêre swaai-punt converter. Dit sal 'n desimale getal te skakel na sy naaste enkel-presisie en dubbel-presisie IEEE 754 binêre swaai-punt nommer, met behulp van n ronde-half-om-selfs afronding (die verstek IEEE afronding af). Dit is geïmplementeer met arbitrêre-presisie rekenkundige, sodat sy doelskoppe korrek afgerond. Dit sal beide normale en subnormale nommers om te skakel, en sal getalle omskep wat oorloop (tot oneindig) of onderloop (nul). Die gevolglike swaai-punt nommer vertoon kan word in tien vorme: in desimale, binêre, in genormaliseer desimale wetenskaplike notasie, in genormaliseer binêre wetenskaplike notasie, as 'n genormaliseerde desimale keer per krag van twee, as 'n desimaal heelgetal keer per krag van twee , as 'n desimaal heelgetal keer per krag van tien, as 'n heksadesimaal swaai-punt konstant, in rou binêre, en in rou heksadesimale. Elke vorm verteenwoordig die presiese waarde van die swaai-punt nommer. Hoekom Gebruik hierdie Converter Hierdie converter sal jou wys waarom getalle in jou rekenaar programme, soos 0,1, nie op te tree as you8217d verwag. Binne-in die rekenaar, die meeste nommers met 'n desimale punt kan slegs 'n ander nommer, net 'n klein bietjie weg van die een wat jy wil, moet instaan vir dit benader. Byvoorbeeld, in enkel-presisie swaai-punt, 0.1 word ,100000001490116119384765625. As jou program is druk 0.1, is dit vir jou lieg as dit druk 0,100000001, it8217s steeds lê, maar ten minste it8217s jy vertel jy regtig don8217t het 0.1. Hoe om hierdie Converter Input Voer 'n positiewe of negatiewe getal, óf in die standaard (bv 134,45) of eksponent (bv 1.3445e2) vorm. Dui fraksionele waardes met 'n desimale punt (lsquo. rsquo), en nie kommas gebruik. In wese is, kan jy tik AL wat 'n rekenaarprogram aanvaar as 'n swaai-punt letterlike, behalwe sonder enige agtervoegsel (soos lsquofrsquo). Gaan die bokse vir die IEEE presisie jy wil kies dubbel. single. of beide. (Dubbel is die standaard.) Dubbel beteken 'n 53-bit significand (minder as subnormale) met 'n 11-bit eksponent enkele beteken 'n 24-bit significand (minder as subnormale) met 'n 8-bis eksponent. Gaan die bokse vir enige uitset formaat wat jy wil kies een of al tien. (Desimale, is die standaard.) Klik lsquoConvertrsquo te omskep. Klik lsquoClearrsquo om die vorm te herstel en begin van voor af. As jy 'n ander nommer te skakel, tik net oor die oorspronklike getal en klik lsquoConvertrsquo 8212 is daar geen behoefte om die eerste klik lsquoClearrsquo. Uitset Daar is tien uitset vorms om van te kies: Desimale. Wys die swaai-punt getal in desimale. (Brei uitset boks, indien nodig, aan alle syfers te sien.) Binary. Wys die swaai-punt nommer in binêre. (Brei uitset boks, indien nodig, aan alle syfers te sien.) Genormaliseerde desimale wetenskaplike notasie. Wys die swaai-punt getal in desimale, maar kompak, met behulp van genormaliseer wetenskaplike notasie. (Brei uitset boks, indien nodig, aan alle syfers te sien.) Genormaliseerde binêre wetenskaplike notasie. Wys die swaai-punt nommer in binêre, maar kompak, met behulp van genormaliseer binêre wetenskaplike notasie. Let. subnormale getalle word gewys genormaliseer, met hul werklike eksponent. Genormaliseer desimale keer per krag van twee. Wys die swaai-punt nommer in 'n hibriede genormaliseer wetenskaplike notasie, as 'n genormaliseerde desimale getal keer per krag van twee. Desimale heelgetal keer per krag van twee. Wys die swaai-punt getal as 'n desimaal heelgetal keer per krag van twee. (Die binêre voorstelling van die desimale heelgetal is die bietjie patroon van die swaai-punt verteenwoordiging, minder sleep nulle.) Hierdie vorm is baie interessant om 'n negatiewe eksponente, aangesien dit verteenwoordig die swaai-punt getal as 'n diadiese fraksie. Desimale heelgetal keer per krag van tien. Wys die swaai-punt getal as 'n desimaal heelgetal keer per krag van tien. Hierdie vorm is baie interessant om 'n negatiewe eksponente, aangesien dit verteenwoordig die swaai-punt getal as 'n breuk. (Brei uitset boks, indien nodig, aan alle syfers te sien.) Hexadecimale swaai-punt konstant. Wys die swaai-punt getal as 'n heksadesimaal swaai-punt konstant. Let. Daar is baie maniere om heksadesimale formaat swaai-punt konstantes, soos jy sou sien as, byvoorbeeld, jy die uitset van Java, Visual C, gcc C, en Python programme vergelyk word. Die verskille in verskeie tale is oppervlakkig al 8212 sleep nulle mag of nie mag nie gewys, positiewe eksponente kan of mag nie 'n plus-teken, ens Dit converter formate om die konstantes sonder sleep nulle en sonder plus tekens. Let. Soos baie programmeertale, toon hierdie converter subnormale getalle ongenormaliseerde, met hul eksponente stel om die minimum normale eksponent. Let. Die laaste heksadesimale syfer in 'n heksadesimale swaai-punt konstant kan hê sleep binêre 0'e in hierdie doesn8217t noodwendig daardie stukkies bestaan in die geselekteerde IEEE formaat. Rou binêre. Wys die swaai-punt nommer in sy rou IEEE formaat (teken bietjie gevolg deur die eksponent veld, gevolg deur die veld significand). Rou heksadesimale. Wys die swaai-punt nommer in sy rou IEEE formaat, soortgelyk aan die rou binêre formaat, maar kompak uitgedruk in heksadesimaal. (Sien hier vir meer besonderhede oor hierdie uitset vorms.) Daar is twee uitset vlae: onnauwkeurig. As dit aangeskakel is, toon dat die omskakeling was onjuiste dit is, dit moes afgerond tot 'n aanpassing van die insette nommer. (Die omskakeling is onnauwkeurig toe die desimale uitset kom nie ooreen met die desimale insette, maar dit is 'n vinniger manier om te sê.) Let wel. Dit converter vlae oorloop tot oneindig en onderloop na nul as onjuiste. Subnormale. As dit aangeskakel is, toon dat die getal was te klein, en omgeskakel met minder as volle presisie (die werklike presisie word in hakies). Implementering Ek het hierdie converter van nuuts 8212 is dit nie staatmaak op moedertaal omskakeling funksies soos strtod () of strtof () of printf (). Dit is gebaseer op die groot heelgetal gebaseer algoritme ek beskryf in my artikel ldquoCorrect Desimale Om swaai komma gebruik van Big Heelgetalle rdquo. I8217ve geïmplementeer dit met behulp van BCMath. Grense vir praktiese redes, Ive stel 'n arbitrêre (ietwat) beperking op die lengte van die desimale insette you8217ll 'n fout boodskap kry as jy dit getref. Dit sal filtreer insette wat andersins oorloop tot oneindig of onderloop aan nul, maar dit sal ook u verhoed dat sommige ldquohardrdquo halfpad afronding gevalle. (Vir die rekord egter hierdie converter aanvaar al die harde voorbeelde I8217ve bespreek op my site.) Vir alle insette wat egter aanvaar word, die produksie is korrek (nieteenstaande enige foute ontsnap my uitgebreide toetsing).IEEE swaai komma Verteenwoordiging S verteenwoordig die teken bietjie, die X se is die eksponent stukkies, en die M s is die MANTISSA stukkies. Let daarop dat die linker bietjie aanvaar in real4 en real8 formate, maar die oomblik as 1 in BYTE 3 van die real10 formaat is. Om die binêre punt behoorlik te skuif, moet jy eers unbias die eksponent en beweeg dan die binêre punt na regs of links die toepaslike aantal bisse. Die volgende is 'n paar voorbeelde in real4 formaat: In die volgende voorbeeld, die teken bietjie nul, en die gestoor eksponent is 128, of 100 0000 0 in binêre, wat is 127 plus 1. Die gestoor MANTISSA is (1.) 000 0000 . 0000 0000, wat het 'n stilswyende voorste 1 en binêre punt, sodat die werklike MANTISSA is een.
No comments:
Post a Comment