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:
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.