Float Point Numero Edustus Binary Optiot


Kelluvat PointFixed-Point - numerot Kiinteät pistemäärät ovat yksinkertainen ja helppokäyttöinen tapa ilmaista murto-osuudet käyttämällä kiinteää bittiä. Järjestelmät, joissa ei ole liukulukuista tukea, käyttävät usein kiinteän pisteen numeroita, jotka edustavat murto-osia. (Järjestelmät, joissa ei ole liukukohtaista laitteistotukea, sisältävät laajan valikoiman laitteita - huippupisteistä kiinteän pisteen DSP-, FPGA - ja kalliista mukautetuista ASIC-järjestelmistä, jotka käsittelevät virtausmateriaalia nopeammin kuin missään äärimmäisen pienikokoisissa mikrokontrollereissa koskaan rakennetuista kelluva pisteyksiköistä ). Kiinteän pisteen termi viittaa binäärikohdan asemaan. Binääripiste on samanlainen kuin pohja-kymmenen desimaalin desimaalipiste, mutta koska tämä on binaari eikä desimaali, käytetään eri termiä. Binaarissa bitit voivat olla joko 0 tai 1, eikä ole erillistä symbolia, jolla määritetään binäärikohdan sijainti. Kuvittelemme tai oletamme kuitenkin, että binäärikohta sijaitsee kiinteässä paikassa numeroiden nimettyjen bittien välillä. Esimerkiksi 32-bittisessä luvussa voimme olettaa, että binaaripiste on olemassa suoraan bittien 15 (15, koska ensimmäinen bitti on numeroitu 0, ei 1) ja 16, jolloin 16 bittiä koko numeeriselle osalle ja 16 bittiä murto-osa. Huomaa, että kaikkein merkittävin bitti koko numerokentässä on yleensä merkitty merkkiribiksi, joka jättää 15 bittiä koko numeeriselle suuruusluokalle. Leveys ja tarkennus Muokkaus Kiinteän pisteen numeron leveys on kiintopisteen numeroon tallennettavien bittien kokonaismäärä. Jos varastoitamme koko osan ja murto-osan eri varastointipaikoille, leveys olisi määrä varastoinnin kokonaismäärä. Kiinteän pistemäärän alue on erilainen mahdollisen vähimmäismäärän ja mahdollisen enimmäismäärän välinen ero. Kiinteän pisteen numeron tarkkuus on bittien kokonaisluku murto-osan numeroon. Koska voimme määritellä, mihin haluamme kiinteän binääripisteen sijainnin, tarkkuus voi olla mikä tahansa numero, aina lukun leveys mukaan lukien. Huomaa kuitenkin, että mitä tarkkuudella meillä on, sitä vähemmän koko valikoimaa meillä on. Standardeja on useita, mutta tässä kirjassa käytetään n kiinteän pisteen numeron leveyttä, p tarkkuutta ja R: tä kokonaisalueelle. Kaikkia numeroita ei voida esittää täsmällisesti kiinteän pisteen numerolla, joten käytetään lähintä approksimaatiota. Kaavan, jolla lasketaan kokonaisluku-esitys (X) float-numeron (x) Qm. n-muodossa, on: Sen muuntamiseksi käytetään seuraavaa kaavaa: Joitakin esimerkkejä Q3.4-muodossa: Satunnaisesti valittuja kelluvia: Joitakin esimerkkejä (erittäin yleinen) 1 Q7.8-muoto: Koska binääripisteen sijainti on täysin käsitteellinen, kiinteän pisteen numeroiden lisääminen ja vähentäminen on identtinen logiikan kanssa, joka tarvitaan lisäämään ja vähentämään kokonaislukuja. Siten, kun lisäät puolet ja puolet Q3.4-muodossa, odotamme: mikä on yhtä kuin odotimme. Tämä pätee yhtä lailla vähennykseen. Toisin sanoen, kun lisäämme tai vähennämme kiinteän pisteen numeroita, summan (tai eron) binaaripiste sijaitsee täsmälleen samassa paikassa kuin kahdessa numerossa, joilla toimimme. Kahden 8-bittisen kiinteän pisteen numeroiden kertomisessa tarvitaan 16 bittiä pitämään tuote. On selvää, koska tuloksissa on eri määrä bittiä, binäärikohdan pitäisi odottaa siirtyvän. Se toimii kuitenkin täsmälleen samalla tavalla binääriin kuin desimaaliin. Kun kerrotaan kaksi numeroa desimaaliluvuksi, desimaalipisteen sijainti on N numeron vasemmalla puolella oikeanpuoleisimman numeron, jossa N on summan summamäärän summa, joka sijaitsee desimaalipisteen oikealla puolella kertoimella ja kertolasku . Niinpä, kun desimaali kerrotaan 0,2 kertaa 0,02, saamme: Kertoimella on yksi luku desimaalipilkun oikealla puolella ja kerroin on kaksi desimaalia desimaalipilkun oikealla puolella. Näin tuotteella on kolme numeroa desimaalipilkun oikealla puolella (eli desimaalipiste sijaitsee kolmella numerolla vasemmalle). Se toimii samoin binaarissa. Edellä olevasta lisäyssarjasta tiedämme, että Q3.4-formaatin numero yksi puoli on 0x8 heksadesimaalisesti. Koska 0x8 kertaa 0x8 kuusikulmassa on 0x0040 (myös heksadesimaalisesti), kiinteän pisteen tulos voi myös olla 0x0040 - niin kauan kuin tiedämme, missä binaaripiste sijaitsee. Antaa kirjoittaa tuotteen binääriin: Koska molemmilla kertojilla ja kertoimilla on neljä bittiä binääripisteen oikealla puolella, tuotteen binaaripisteen sijainti on kahdeksan bittiä vasemmalle. Siten vastauksemme on 00000000.01000000, mikä on, kuten odotimme, yhtä kuin neljäsosa. Jos haluamme, että lähdön muoto on sama kuin syötteen muoto, meidän on rajoitettava tulojen alue ylivuodon estämiseksi. Muuntaminen Q7.8: sta takaisin Q3.4: een on yksinkertainen asia siirtää tuote oikein 4 bittiä kohden. Kiinteäpistelukuja käytetään usein sisäisesti digitaalisiin suodattimiin, kuten FIR - ja IIR-suodattimiin. FIR - ja IIR-algoritmeja käytetään käytännön näkökohtina käyttäen kiinteän pisteen numeroita. 2 3 Monet siniaallot tuottavat upotetut järjestelmät, kuten DTMF-generaattorit, tallentavat sinipöydän ohjelmamuistiin. (Sen käytetään matemaattisten sinia () ja kosini () toimintojen lähentämiseen. Koska tällaisilla järjestelmillä on usein hyvin pieni määrä ohjelmamuistia, usein kiinteän pisteen numeroita käytetään kahdella eri tavalla, kun tällaisia ​​taulukoita käytetään: taulukkoihin tallennetut arvot ja näiden taulukoiden indeksointiin käytettävät palat. Sine-taulukkoon tallennetut arvot Muokkaavat tyypillisesti yhden kvadrantin sini - ja kosinifunktioista, jotka tallennetaan kyseiseen taulukkoon. Tyypillisesti se on kvadrantti, jossa nämä funktiot tuottavat lähtöarvot alueella 0-1. Tällaisissa taulukoissa olevat arvot tallennetaan tavallisesti kiinteiksi pisteiksi - usein 16-bittisiä numeroita allekirjoittamattomassa Q0.16-muodossa tai 8-bittisissä numeroissa allekirjoittamattomat Q0.8-arvot. Näyttää siltä, ​​että on olemassa kaksi suosittua tapaa käsitellä sitä, että Q0.16 ei pysty käsittelemään 1,0: tä, vaan se hoitaa vain numeroita 0: sta (1,0-2-16): (a) Skaalaa täsmälleen kahden tehon (tässä tapauksessa 216 ), kuten useimmat muut kiinteäpisteiset järjestelmät, ja korvaavat (leikkeen) arvot liian suuriksi tallettaakseen ne suurimmaksi arvoksi, joka voidaan tallentaa: niin 0 on esitetty 0, 0,5 edustaa 0x8000, (1.0-2-16) edustaa kuten 0xFFFF ja 1,0 typistetty ja edustaa myös 0xFFFF. 4 (b) Skaalaa suurimmalla mahdollisella arvolla (tässä tapauksessa 0xFFFF), joten sekä maksimi - että minimiarvot voidaan esittää täsmälleen: niin 0 on esitetty 0: nä (1.0-2-16), joka on esitetty 0xFFFE: ksi ja 1.0 on edustaa täsmälleen 0xFFFF. 5 Muutama ihminen piirtää melko tarkkoja piirejä ja laskee melko tarkkaa sinia ja kosinetta Bezier-splinillä. Taulukko muuttuu kahdeksaksi arvoksi, jotka edustavat yhtä Bezier-käyrää, joka on suunnilleen 18 ympyrää noin 4 miljoonasosaa tai 14 ympyrää tarkkuudella noin 1 osa tuhannesta. 6 7 Monet ihmiset mieluummin edustavat kiertoa (kuten kulmia) kierrosten suhteen. Kierrosluvun kokonaisluku kertoo kuinka monta kokonaista vallankumousta on tapahtunut. Käännösten murto-osa, kerrottuna 360: llä (tai 1 2 8: lla), käyttäen vakioitua kiinteän pisteen aritmeettista, antaa pätevän kulman -180 asteen (radians) ja 180 asteen välillä (radiaanit). Joissakin tapauksissa on kätevää käyttää allekirjoittamatonta kertolaskua (pikemminkin kuin allekirjoitettu kertolasku) binaarikulmassa, joka antaa oikean kulman välillä 0-360 astetta (2 radiaania). Suurin etu kulmien tallentamiseksi kiertokytkimen kiinteäksi osaksi on nopeus. Yhdistämällä nykyinen sijaintikulma johonkin positiiviseen tai negatiiviseen inkrementaaliseen kulmaan uuden sijainnin saamiseksi on erittäin nopeaa, jopa hitaissa 8-bittisissä mikrokontrollereissa: se vie yhden kokonaislukeman lisäyksen, ylittämättä ylivirtausta. Muut muodot kulmien tallentamista varten edellyttävät samaa lisäystä sekä erikoistapauksia käsitellä yli 360 astetta tai alle 0 asteen reunat. Binäärikulmamuotoihin tallennettujen kulmien sijaan, tallentamiskulmat muissa muodoissa - esimerkiksi 360 astetta täydellisen vallankumouksen aikaansaamiseksi tai 2 radiaania täydellisen vallankumouksen aikaansaamiseksi - johtavat väistämättä tiettyihin bittimuotoihin, jotka antavat kulman kyseisen alueen ulkopuolelle, joka vaatii ylimääräisiä vaiheita alueelle - pienentää arvoa haluttuun alueeseen tai johtaa joidenkin bittikuvien, jotka eivät ole lainkaan kelvollisia kulmia (NaN) tai molempia. Binäärikulmamuodon käyttäminen kierrosyksiköissä sallii nopean (shift-and-maskin käytön välttäen moninkertaistumisen) erottamaan bittien seuraavasti: bittejä, jotka edustavat kokonaislukuja (joita ei oteta huomioon, kun tarkastellaan kulman kynnystä, jotkut järjestelmät eivät koskaan vaivaudu tallentamaan näitä bittiä ensi sijassa) 2 bittiä, jotka edustavat kvadranttibittejä, joita käytetään suoraan indeksoimaan hakutaulukkoon matalan järjestyksen bittejä, jotka ovat vähemmän kuin yksi vaihe indeksitaulukkoon (vaiheakkupaketit, jotka jätetään huomiotta tarkastelematta kulman viivettä ilman interpolointi) Pienen tilauksen vaihebittejä parantaa taajuuden resoluutiota, jopa ilman interpolointia. Jotkin järjestelmät käyttävät matalan järjestyksen bittejä lineaarisesti interpoloimaan taulukon arvojen välillä. 12 Näin voit saada entistä paremman tarkkuuden käyttämällä pienempää taulukkoa (säästämällä ohjelmatilaa), uhraamalla muutaman jakson tämän ylimääräisen interpolointilaskennan avulla. Jotkut järjestelmät saavat entistä paremman tarkkuuden käyttämällä entistä pienempää taulukkoa uhraamalla muutama sykli käyttääkseen näitä matalajärjestysbittejä laskemaan kuutiometristä interpolointia. 4 Ehkä yleisimpi binaarikulmamuoto on herkkuja. Brads Edit Monet upotetuilla järjestelmillä tallennetaan kulma, käännösten murto-osa, yhdellä tavuisella binäärikulmamuodossa. 13 On olemassa useita tapoja tulkita arvoa kyseisessä tavussa, mikä kaikki tarkoittaa (enemmän tai vähemmän) samaa kulmaa: kulma yksiköissä brads (binäärisiä radiaaneja) tallennettuna 8-bittiseksi unsigned-kokonaislukuna, 0 - 255 brads kulma yksiköissä, jotka on tallennettu 8 bittiseksi allekirjoitetuksi kokonaislukutukseksi, -128: stä 127: een kulmasta kääntöyksikköinä, joka on tallennettu murto-osaisena allekirjoittamattomassa Q0.8-muodossa, 0: sta vain alle 1: ksi täyskäännä kulma yksiköissä käännöksistä, jotka on tallennettu murskattuina käännöksinä allekirjoitetussa Q0.7 () - muodossa, -12: sta vain alle 12: een täyteen kääntöön Yksi täysi kierros 14 on 256 pistettä 15 on 360 astetta. Jos yksittäinen tavu ei anna tarpeeksi tarkkuutta, brad-järjestelmä voidaan helposti laajentaa murto-osilla - 65 356 laskettua käämitystä kohti voidaan esittää 16 bittiä. 16 Lue lisää EditDecimal to Floating-Point - muunnin Tietoja Decimal to Floating-Point - muuntimesta Tämä on desimaali-binääri-liukulukuinen muunnin. Se muuntaa desimaaliluvun lähimpään yhden tarkkuuden ja kaksinkertaisen tarkkuuden IEEE 754 binääriseen liukuluku - numeroon käyttämällä pyöreää puolipistettä pyöristystä (oletus IEEE-pyöristystila). Se toteutetaan mielivaltaisella tarkkuudella aritmeettisella, joten sen muunnokset ovat oikein pyöristettyjä. Se muuntaa sekä normaalit että epänormaalit numerot ja muuntaa ylivuodot (äärettömiksi) tai alivirtaukset (nollaksi). Tuloksena oleva liukulukuinen numero voidaan näyttää kymmenessä muodossa: desimaalisena, binaarisena, normalisoituna desimaaliluvutuksessa, normalisoituna binaarisessa tieteellisessä notaatiossa, normalisoituna desimaalisena ajankohtana kahden tehon, desimaalin kokonaisluku kertaa kahden , desimaalin kokonaisluku kertaa kymmenen, heksadesimaalinen kelluva pisteen vakio, raaka binääri ja raaka heksadesimaalinen. Jokainen lomake edustaa kelluvan pisteen numeron tarkkaa arvoa. Miksi käyttää tätä muunninta Tämä muunnin näyttää, miksi tietokoneohjelmasi numerot, kuten 0.1, eivät toimi kuten olette odottaneet. Tietokoneen sisällä useimmat desimaalipilkkujen numerot voidaan arvioida vain toisen numeron suhteen, vain pienellä etäisyydellä haluamallasi tavalla. Esimerkiksi yksitarkkuudeltaan kelluva piste, 0.1 tulee 0.100000001490116119384765625. Jos ohjelma tulostaa 0,1, se valehtelee sinulle, jos se tulostaa 0.100000001, it8217s edelleen valehtelee, mutta ainakin se8217s kertoo sinulle todella don8217t on 0,1. Tämän muunnoksen käyttäminen Anna positiivinen tai negatiivinen numero joko standardissa (esim. 134,45) tai eksponentissa (esim. 1.3445e2). Ilmoita murtoarvot desimaalipisteellä (lsquo. rsquo), äläkä käytä pilkkuja. Pohjimmiltaan voit syöttää, mitä tietokoneohjelma hyväksyy liukulukuisena kirjaimena, paitsi ilman mitään jälkilehteä (kuten lsquofrsquo). Valitse haluamasi IEEE-tarkkuuden laatikot valitsemalla Double. Yksittäinen . tai molemmat. (Double on oletusarvoinen.) Tupla tarkoittaa 53-bittistä merkitystä (vähemmän kuin epänormaalia) 11-bittisellä eksponentilla. Yksittäinen tarkoittaa 24-bittistä merkitystä (vähemmän kuin jos on epänormaalia) ja 8-bittinen eksponentti. Valitse haluamasi tulostusmuodon valintaruudut yhdestä tai kymmenestä. (Decimal on oletusarvo.) Napsauta lsquoConvertrsquo muunnettavaksi. Napsauta lsquoClearrsquo, jos haluat nollata lomakkeen ja aloittaa tyhjästä. Jos haluat muuntaa toisen numeron, kirjoita vain alkuperäinen numero ja napsauta lsquoConvertrsquo 8212, et tarvitse ensin napsautusta lsquoClearrsquo. Kymmenen tulostusmuotoa on valittavissa: desimaali. Näytä kelluvan pisteen numero desimaaliluvuksi. (Laajenna ulostulolaatikko tarvittaessa nähdäksesi kaikki numerot.) Binaari. Näytä kelluvan pisteen numero binaarissa. (Laajenna ulostulolaatikko tarvittaessa nähdäksesi kaikki numerot.) Normalisoidut desimaalit tieteelliset merkinnät. Näytä kelluvan pisteen numero desimaalilukuun, mutta kompakti käyttäen normaalia tieteellistä merkintää. (Laajenna lähtöpakkaus tarvittaessa nähdäksesi kaikki numerot.) Normalisoidut binääritieteelliset merkinnät. Näytä kelluvan pisteen numero binääriin, mutta kompakti, käyttämällä normalisoitua binääristä tieteellistä merkintää. Huomautus . alitajuiset numerot näytetään normalisoituna, niiden todellisen eksponentin kanssa. Normalisoidut desimaalilukemat ovat teho kahdesta. Näytä kelluva piste numerolla hybridi normalisoitu tieteellinen notaatio, kuten normalisoitu desimaaliluku kertaa teho kaksi. Desimaaliarvo kokonaisluku kertaa kaksi. Näytä kelluvan pisteen numero desimaalilukuisena kokonaislukuna kerran kahdella teholla. (Desimaaliarvon binaarinen esitys on kelluvuuselementin bittikuvio, vähemmän jäljellä olevia nollia.) Tämä lomake on mielenkiintoisin negatiivisille eksponentteille, koska se edustaa kelluvan pisteen lukua dyadisena osuutena. Decimektiivinen kokonaisluku kertaa kymmenen. Näytä kelluvan pisteen numero desimaalilukuina kymmenen kertaa. Tämä lomake on mielenkiintoisin negatiivisille eksponentteille, koska se edustaa kelluvan pisteen lukumäärää murto-osana. (Suurenna ulostulolaatikko tarvittaessa nähdäksesi kaikki numerot.) Hexadecimal floating-point constant. Näytä kelluvan pisteen numero heksadesimaalisena liukuluku-vakiona. Huomautus . Voit muokata heksadesimaalisia liukuluku vakioita, kuten voit esimerkiksi vertailla Java-, Visual C-, gcc C - ja Python-ohjelmien tulostusta. Erot eri kielillä ovat pinnallisia, vaikka 8212 jälki-nollia voidaan tai ei välttämättä näytetä, positiiviset eksponentit saattavat tai eivät ehkä saa plusmerkkiä jne. Tämä muunnin muodostaa vakiot ilman nollia ja ilman plusmerkkejä. Huomautus . Kuten muissakin ohjelmointikieleissä, tämä muunnin näyttää epänormalisoidut epänormaalit numerot, joiden eksponentit asetetaan normaaliin vähimmäisarvoon. Huomautus . Heksadesimaalisen liukuvapisteen vakion heksadesimaaliluvun viimeisellä heksadesimaaliluvulla voi olla jäljellä oleva binäärinen 0s tässä doesn8217t: ssä, mikä tarkoittaa välttämättä sitä, että kyseiset bitit ovat valitussa IEEE-muodossa. Raaka binääri. Näytä kelluvan pisteen numero sen raakatuotteessa IEEE (merkkibitti, jota seuraa eksponentti-kenttä ja merkkikenttä). Raaka heksadesimaali. Näytä kelluvan pisteen numero raakavirtatiedostomuodossaan, joka vastaa raaka binääriformaattia, mutta ilmaistaan ​​heksadesimaalisesti. (Katso lisätietoja näistä tulostuslomakkeista.) Tulostuslippuja on kaksi: Inexact. Jos tämä on valittu, tämä osoittaa, että muuntaminen oli epätäsmällistä, eli sitä oli pyöristettävä syöttönumeron lähentämiseen. (Tulostus on epätäsmällinen, kun desimaaliluku ei vastaa desimaalierää, mutta tämä on nopeampi tapa kertoa.) Huomaa. Tämä muuntimen lippujen ylivuoto äärettömyyteen ja alivirtaus nollaan epätarkaksi. Epätavallinen. Jos valitaan, tämä osoittaa, että numero oli liian pieni ja muunnettu pienemmällä tarkkuudella (todellinen tarkkuus näkyy suluissa). Toteutus Kirjoitin tämän muunnoksen tyhjästä 8212, eikä se luota alkuperäisiin muuntotoimintoihin, kuten strtod () tai strtof () tai printf (). Se perustuu suuriin kokonaislukuihin perustuvaan algoritmiin, jota kuvataan artikkelissani ldquoCorrect Decimal To Floating-Point käyttää suuria kokonaislukuja rdquo. I8217ve toteutti sen käyttämällä BCMathia. Käytännöllisistä syistä olen asettanut mielivaltaisen (jonkin verran) rajan desimaalipääoman pituudelle, jos saat virheilmoituksen, jos osut siihen. Tämä suodattaa syötteet, jotka muutoin ylittäytyisivät äärettömyydelle tai alittaviksi nollaksi, mutta se estää sinua myös syöttämästä ldquohardrdquo puoliväliin pyöristystapauksia. (Tietueesta huolimatta tämä muunnin hyväksyy kaikki vaikeat esimerkit, joita olen keskustellut sivustossani.) Kaikkien syötteiden osalta, jotka kuitenkin hyväksytään, tulos on oikea (huolimatta mahdollisista vikoista, jotka pakenevat laajaan testaukseen). Binary Fractions Vaikka ne toimivat samalla tavalla periaatteet, binaariset jakeet ovat erilaisia ​​kuin desimaalilukuja, kuinka monta numeroa ne voivat esittää täsmällisesti tietyn lukumäärän kanssa, ja näin ollen myös millaiset luvut aiheuttavat pyöristysvirheitä. Erityisesti binääri voi edustaa vain niitä numeroita äärellisenä fraktiona, jossa nimittäjä on valta on 2. Valitettavasti tämä ei sisällä suurinta osaa numeroista, jotka voidaan esittää lopullisena murto-osana pohjaan 10, kuten 0,1. Pyöristetty 4-numeroiseksi Pyöristetty arvo fraktiona Ja näin saat pyöristysvirheen, kun kirjoitat numeron, kuten 0.1, ja kirjoitat tulkin tai kääntäjän läpi. Se ei ole yhtä suuri kuin 380 ja se voi olla näkymätön, koska tietokoneet ovat katkaisseet 23 tai 52 binäärilukuisen numeron sijasta 4: n sijaan. Mutta virhe on olemassa ja aiheuttaa ongelmia lopulta, jos vain sivuutat sen. Miksi käyttää binaaria Alimmalla tasolla tietokoneet perustuvat miljardeihin sähköisiin elementteihin, joissa on vain kaksi tilaa (yleensä matala ja korkea jännite). Tulkitsemalla ne 0 ja 1, sen erittäin helppo rakentaa piirejä binäärilukujen tallentamiseen ja laskemiseen niiden kanssa. Vaikka se on mahdollista simuloida desimaalien lukujen käyttäytymistä binääripiireillä, se on vähemmän tehokas. Jos tietokoneet käyttävät desimaalinumeroita sisäisesti, heillä on vähemmän muistia ja ne ovat hitaita samalla tekniikan tasolla. Koska binääri - ja desimaalilukujen välinen ero ei ole tärkeä useimmille sovelluksille, looginen valinta on luoda tietokoneita, jotka perustuvat binäärilukuihin ja jotka elävät sillä, että ylimääräinen hoito ja vaivaaminen ovat välttämättömiä sovelluksille, jotka edellyttävät desimaalin kaltaista käyttäytymistä. Kelluva kohtaopas Koti Perusviestit Viitteet xkcd-numeromuodot

Comments

Popular posts from this blog

Paras Levitteet Forex Kaupankäynti

Belajar Forex Kaupankäynti 2012

Forex Kaupankäynti Tilin