fixpontos számmá

Számítások a mi eszközök nem mindig (enyhén szólva) egész számok, lebegőpontos számok (float vagy double) - nagyon erőforrás-igényes, és nem mindig helyes. Mit kell tenni?

Számos módja van. Például lehetőség van arra, hogy használja a skálázott számokat. Ha azt szeretnénk mérni V, el lehet képzelni az értéket mV. Így megkaptuk és egész szám, és pontos számításokat. Ha nem elég a mV, mikrovolt lehet használni, és így tovább.

Ez a megközelítés gyakran használják különböző CADah és a pénzügyi szektorban. Például, a KiCad, távolságokat mérik nanométerben és tárolt int'ah (innen, a maximális méret a tábla módon -. 4 * 4 m).

Gyakran jelenértéke a különböző szinteken nem különösebben kívánatos (például a kijelzőn megjeleníteni kívánt egész részét és a tört része csak arra szolgál, hogy növelje a pontosabb számításokat), és akkor meg kell használni a száma fix pont. A több fix-pont - ugyanezen egész számok, de, hagyományosan, egy tört része van allokálva egy bizonyos számú bitet. Nézzük például a 32-bites egész Némi fixpontos szám:



Amint látható, a szám a fix pont nevezik qm.n, ahol m - egész részét, és az N - frakcionált. Ha a szám alá kell írnia, az előjel bit van kiválasztva, hogy egy egész része. A jel közvetetten hiányában egy kicsit a címet. Például:

Szóval, hogyan kell tárolni a száma fix pont, mi lesz a szokásos egész konténerek, megadhatjuk nekik, mint ez:

A maximális és minimális értékek

Bármennyi egy minimum és maximum értékek. A maximális érték a számát fix-pont - 2 ^ m-1 / (2 ^ n-1), és a minimális menetemelkedése 1 / (2 ^ n-1). (Itt is, mint korábban, m - az egész rész és n - frakcionált)

példák:
q16.16: maximális száma: 65.535,99998474. lépés - 1.53e-5
q0.32: maximális száma: ,9999999997671. lépés - 2.328e-10
q5.27: maximális száma: 31,9999999925. lépés - 7.45e-9

Konvertálása egy fix pontot, és vissza

Átalakítani egy lebegőpontos szám számának fix, akkor csak meg kell szorozza meg 2 ^ n.

Itt például, makrók ez az átalakulás:

Ha konvertálni egy egész szám, akkor nem szaporodnak, hanem egyszerűen a váltás, hiszen szorzás ereje két -, hogy ugyanaz a váltás, de a verzió szorzás - általánosabb:


Átalakítani, ha nem furcsa, azt megváltoztassák a számot vissza.


Lehet alakítani egy lebegőpontos szám:


Számos átalakítás egyik helyzetből a másikba fix pont, azt el kell tolni a különbség a száma frakcionált bitek:

Összeadás, kivonás, szorzás,

Összeadás és kivonás, beleértve a rögzített pont pontosan ugyanaz, mint az egész számok. Nem lehet meghatározni makrókat erre

De a szorzás és osztás, szükségünk tartály kétszer nagyobb tárolja a köztes eredmény, mert megszorozzuk 32 bit 32 bit 64 bit történhet:

By the way, ha kell osztani 10, vagy bármely más állandó, akkor lehetséges, hogy a előfeldolgozó számít 10/01, majd - megszorozva ezt a számot. Ilyen trükk lehetővé teszi nagymértékben felgyorsítja a fülét processzorok hardver nélkül elválasztó. Például:

Ha meg kell szorozni, vagy osztani egy egész szám, akkor lehetséges, hogy ezt a műveletet a helyszínen nélkül változások és átalakulások

Természetesen a fő ok, amiért dolgozunk ezekkel a számokkal - sebesség. Ahhoz, hogy hatékonyan működjön, szükségünk van egy csomó változás.

Ahhoz, hogy a változások gyorsan történnek a processzor, hogy az úgynevezett hordó váltókar. hordó váltókar - egy darab ALU, amely lehetővé teszi, hogy mozog, hogy tetszőleges számú bit órajel ciklusra.

Gyakran előfordul, hogy hordó váltókar emulált szorzó. Például, hogy elmozdulás a számot a bal 3 bit, akkor egyszerűen szorozva 8.

Van egy másik trükk. Ha egy tört része a bitek számát figyelembe többszöröse 8, a processzor egyszerűen kiválaszthatja a bájt offset és ne használja a változások egyáltalán. Ez különösen igaz, ha a szám kisebb, mint a bit processzor razradnost számok (azaz, 32-bites számot AVR).

teljes

Mint a többi szám, a szám a fix pont, akkor belegyömöszölni. Például:

Ahhoz, hogy ez ne történhessen meg, gyakran használják szám nulla egész bit. Például, q0.32. Mióta szorozva az egységek száma kevesebb, mint a kisebb egységet mindig lesz egy olyan szám kevesebb, mint egy, q0.32 túlfolyás szorzás lehetetlen.

Abban Emellett száma fixpontos viselkedik pontosan ugyanaz, mint a rendszeres egészek.

Hibakeresés egy fix pont lehet nagyon bonyolult, mert ahelyett, hogy egy egyszerű és tiszta „5” a debugger, akkor megjelenik a „327 680”. Szerencsére sok a programok képesek mutatni a számított eredményeket az óra-box. Például IAR'e írhat:

fixpontos számmá

Amint jött a lehetőség, hibakeresés sokkal könnyebb lett.

következtetés

Annak ellenére, hogy voltak már rendelkezésre álló vezérlők FPU, a szám a fix pont legyen az Arsenal bármilyen embedder. A dolog nagyon hasznos, gyors, elegáns és hordozható. Ez különösen igaz az FPGA, ahol a változások könnyen kapcsolatot a megfelelő nyilvántartásban, ezért a száma fix pont ott munkát csak rendkívül gyors.

Figyelembe véve a szorzás és osztás a fixpontos számokat. 64 bites szorzás és osztás különösen is nagyon lassú. Különösen a 8- és 16 beatniks. A szorzás és osztás lehet megvalósítani használata nélkül típusok nagyobb kapacitású. Például szorzás Q16:

4 szükség szorzás = 1616> 32 bit.
Division Q16:

Bár bitenkénti, de működik időnként bsstree mint 64 osztás Cortex-M3. Talán lehet, hogy még gyorsabban a hardver részlege 32/32 => 32 és az algoritmus Knuth.

Hű, köszönöm, nem volt tisztában az ilyen megközelítés :) Mindig 64 bites szorzás. Meg kell majd próbálja meg feladataikat.

Hozzáadott cikket. És én hozzá mintegy szorzás egészek.

Kapcsolódó cikkek