Binární škálování - Binary scaling - Wikipedia
![]() | tento článek potřebuje další citace pro ověření.Prosince 2009) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Binární škálování je programování technika používaná obvykle ve vestavěných C, DSP a assembler programy k implementaci neceločíselných operací pomocí nativního celé číslo aritmetika procesoru.
Přehled
Reprezentace hodnoty pomocí binárního měřítka je přesnější než reprezentace s plovoucí desetinnou čárkou, která zaujímá stejný počet bitů, ale obvykle představuje hodnoty omezenějšího rozsahu, což snadněji vede k aritmetické přetečení během výpočtu. Implementace operací pomocí celočíselných aritmetických pokynů je často (ale ne vždy) rychlejší než odpovídající pokyny s plovoucí desetinnou čárkou.
Pro každou proměnnou, která má být reprezentována, je vybrána pozice pro „binární bod“ a podle toho jsou upraveny binární posuny spojené s aritmetickými operacemi. Binární škálování odpovídá v Q (číselný formát) na první číslici, tj. Q1.15 je 16bitové celé číslo v měřítku s jedním bitem jako celé číslo a patnáct jako zlomkové. Číslo Bscal 1 nebo Q1,15 by představovalo přibližně 1 999 až −2,0.
Uvedeme příklad, běžný způsob použití celočíselná aritmetika simulovat plovoucí desetinnou čárku pomocí 32bitových čísel znamená vynásobit koeficienty 65536.
Použitím binární vědecká notace, toto umístí binární bod na B16. To znamená, že nejvýznamnějších 16 bitů představuje celočíselnou část, zbytek představuje zlomkovou část. To znamená, že celé číslo B16 se znaménkem komplementu může mít nejvyšší hodnotu a nejnižší hodnota −32768,0. Jinak řečeno, číslo B, je počet celočíselných bitů použitých k reprezentaci čísla, které definuje jeho rozsah hodnot. Zbývající nízké bity (tj. Necelé bity) se používají k ukládání zlomkových množství a zajištění větší přesnosti.
Například pro reprezentaci 1,2 a 5,6 jako B16 je vynásobíte 216, což dává 78643 a 367001 jako nejbližší celá čísla.
Jejich vynásobení dává
28862059643
Chcete-li jej převést zpět na B16, vydělte jej 216.
Získáte 440400B16, který se při převodu zpět na číslo s plovoucí desetinnou čárkou (vydělením opět 216, ale držet výsledek jako plovoucí desetinnou čárku) dává přibližně 6,71997. Správný výsledek je 6,72.
Změna měřítka po násobení
Výše uvedený příklad pro násobení B16 je zjednodušený příklad. Změna měřítka závisí jak na hodnotě měřítka B, tak na velikosti slova. B16 se často používá v 32bitových systémech, protože funguje jednoduše vynásobením a dělením 65536 (nebo posunutím 16 bitů).
Zvažte Binární bod v podepsaném 32bitovém slově takto:
0 1 2 3 4 5 6 7 8 9 S X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
kde S je bit znaménka a X jsou ostatní bity.
Umístění binárního bodu na
- 0 udává rozsah -1,0 až 0,999999.
- 1 udává rozsah −2,0 až 1,999999
- 2 udává rozsah -4,0 až 3,999999 atd.
Pokud používáte různé měřítka B a / nebo velikosti slov, musí se použít kompletní vzorec převodu měřítka B.
Zvažte 32bitovou velikost slova a dvě proměnné, jednu s měřítkem B na 2 a druhou s měřítkem 4.
1.4 @ B2 je 1,4 * (2 ^ (wordize-2-1)) == 1,4 * 2 ^ 29 == 0x2CCCCCCD
Všimněte si, že zde jsou hodnoty 1.4 velmi dobře znázorněny s 30 zlomkovými bity. 32 bitů číslo s plovoucí desetinnou čárkou má 23 bitů pro uložení zlomku. To je důvod, proč je měřítko B vždy přesnější než plovoucí desetinná čárka stejné velikosti slova. To je zvláště užitečné v integrátoři nebo opakované sčítání malých množství, kde chyba zaokrouhlování může být při použití s plovoucí desetinnou čárkou jemný, ale velmi nebezpečný problém.
Nyní větší číslo 15,2 na B4.
15,2 @ B4 je 15,2 * (2 ^ (velikost slova-4-1)) == 15,2 * 2 ^ 27 == 0x7999999A
Počet bitů pro uložení zlomku je 28 bitů. Vynásobením těchto 32bitových čísel získáte 64bitový výsledek 0x1547AE14A51EB852
Tento výsledek je v B7 v 64bitovém slově. Posunutím dolů o 32 bitů získáte výsledek v B7 za 32 bitů.
0x1547AE14
Chcete-li převést zpět na plovoucí desetinnou čárku, vydělte to (2 ^ (wordize-7-1)) == 21.2800000099
Lze použít různá měřítka. Například B0 lze použít k vyjádření libovolného čísla mezi −1 a 0,999999999.
Binární úhly
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Binary_angles.svg/360px-Binary_angles.svg.png)
Binární úhly jsou mapovány pomocí B0, s 0 jako 0 stupňů, 0,5 jako 90 ° (nebo ), -1,0 nebo 0,9999999 jako 180 ° (nebo π) a −0,5 jako 270 ° (nebo ). Když jsou tyto binární úhly přidány pomocí normálu doplněk dvou matematika, rotace úhlů je správná, dokonce i při překročení hranice znaménka; to pohodlně odstraní kontroly úhlů ≥ 360 ° při manipulaci s běžnými úhly[1] (data, která umožňují úhly s více než jedním otočením, musí používat jiné kódování).
Podmínky binární úhlové měření (BAM)[2] a binární úhlový měřicí systém (BAMS)[3] stejně jako brads (binární radiány nebo binární titul) odkazují na implementace binárních úhlů. Našli uplatnění v robotice, navigaci,[4] počítačové hry,[5] a digitální senzory.[6]
Bez ohledu na to, jaký bitový vzor je uložen v binárním úhlu, když je vynásoben o 180 ° (nebo π) pomocí standardního podepsaného aritmetika s pevným bodem, výsledkem je vždy platný úhel v rozsahu -180stupňů (−π radiány ) až +180 stupňů (+ π V některých případech je vhodné použít nepodepsané násobení (namísto znaménkové násobení) na binární úhel, který dává správný úhel v rozsahu 0 až +360 stupňů (+ 2π radiány nebo +1 otáčet se ). Ve srovnání s ukládáním úhlů ve formátu binárního úhlu má ukládání úhlů v jakémkoli jiném formátu nevyhnutelně za následek, že některé bitové vzory dávají „úhly“ mimo tento rozsah, což vyžaduje další kroky k rozsah-zmenšit hodnotu do požadovaného rozsahu nebo má za následek některé bitové vzory, které vůbec nejsou platné úhly (NaN ), nebo oboje.
Aplikace technik binárního škálování
Techniky binárního škálování byly použity v 70. a 80. letech pro výpočty v reálném čase, které byly matematicky náročné, jako například letová simulace a v Jaderná elektrárna řídicí algoritmy od konce 60. let. Tento kód byl často komentován binárními měřítky přechodných výsledků rovnic.
V mnoha se stále používá binární škálování DSP aplikace a mikroprocesory vyrobené na zakázku jsou obvykle založeny na technikách binárního škálování. Binární úhlové měření se používá v STM32G4 řada vestavěná CORDIC koprocesory.
Binární škálování se aktuálně používá v DCT slouží ke kompresi JPEG obrázky v nástrojích, jako je GIMP.
Ačkoli plovoucí desetinná čárka převzala do značné míry, kde je vyžadována rychlost a mimořádná přesnost, binární škálování funguje na jednodušším hardwaru a je přesnější, když je předem znám rozsah hodnot a je dostatečně omezený. Důvodem je to, že všechny bity v binárním měřítku se používají pro přesnost hodnoty (i když v případě, že je rozsah hodnot velký), mohou existovat úvodní nuly, zatímco v plovoucí řádové čárce se některé bity používají k definování škálování.
Viz také
- Libfixmath - knihovna napsaná v jazyce C pro matematiku s pevným bodem
- Q (číselný formát)
- Minifloat
- Blokovat škálování s plovoucí desetinnou čárkou
- Modulový provoz
Reference
- ^ Hargreaves, Shawn. "Úhly, celá čísla a modulo aritmetika". blogs.msdn.com. Archivováno z původního dne 30.06.2019. Citováno 2019-08-05.
- ^ „Binární úhlové měření“. Archivovány od originál dne 21. 12. 2009.
- ^ „Binární úhlový měřicí systém“. akronymy. slovník.
- ^ LaPlante, Phillip A. (2004). „Kapitola 7.5.3, Binární úhlová míra“. Návrh a analýza systémů v reálném čase. www.globalspec.com.
- ^ Sanglard, Fabien (2010-01-13). "Recenze kódu Doom 1993 - Sekce" Stěny"". fabiensanglard.net.
- ^ „Modul kompasu Hitachi HM55B (# 29123)“ (PDF). www.hobbyengineering.com. Paralaxový digitální kompasový senzor (# 29123). Parallax, Inc. Květen 2005. Archivovány od originál (PDF) dne 11.7.2011 - prostřednictvím www.parallax.com.