Měřítko (výpočetní technika) - Scale factor (computer science) - Wikipedia

v počítačová věda, a měřítko je číslo používá se jako multiplikátor k reprezentaci čísla na jiném měřítko, fungující podobně jako exponent v matematika. Faktor měřítka se používá, když je třeba, aby množina reálných čísel byla reprezentována v jiném měřítku, aby se vešla konkrétní formát čísla. Ačkoli použití měřítka rozšiřuje rozsah reprezentovatelných hodnot, také snižuje přesnost, což má za následek chyba zaokrouhlování pro určité výpočty.

Použití

Určité formáty čísel lze zvolit pro aplikaci pro pohodlí při programování nebo kvůli určitým výhodám, které pro tento formát čísel nabízí hardware. Například první procesory nativně nepodporovaly IEEE standard s plovoucí desetinnou čárkou pro reprezentaci zlomkových hodnot, takže celá čísla byla použita k ukládání reprezentací hodnot reálného světa použitím měřítka na skutečnou hodnotu. Podobně proto, že hardwarová aritmetika má pevnou šířku (obvykle 16, 32 nebo 64 bity, záleží na datový typ ), faktory měřítka umožňují reprezentaci větších čísel (ručním vynásobením nebo dělením zadaným faktorem měřítka), i když na úkor přesnosti.[1] Z nutnosti to bylo provedeno v software, protože hardware nepodporoval zlomkovou hodnotu. Faktory měřítka se také používají v číslech s plovoucí desetinnou čárkou a nejčastěji se používají pravomoci dvou. Například formát s dvojitou přesností vyčlení 11 bitů pro měřítko (a binární exponent) a 53 bitů pro významně, umožňující různé stupně přesnosti pro reprezentaci různých rozsahů čísel a rozšíření rozsahu reprezentovatelných čísel nad rámec toho, co by bylo možné reprezentovat pomocí 64 explicitních bitů (i když za cenu přesnosti).[2]

Jako příklad toho, kde je ztracena přesnost, 16 bitů nepodepsaný celé číslo (uint16) může obsahovat pouze hodnotu až 65 53510. Pokud se 16bitová celá čísla bez znaménka používají k reprezentaci hodnot od 0 do 13107010, pak faktor měřítka12 by byly zavedeny tak, aby škálované hodnoty přesně odpovídají do skutečného světa dokonce celá čísla. V důsledku toho například číslo 3 nelze reprezentovat, protože uložené 1 představuje skutečný svět 2 a uložený 2 představuje skutečný svět 4; není k dispozici dostatek bitů, aby se zabránilo této chybě v této reprezentaci.

Operace se škálovanými hodnotami

Jakmile je uložena škálovaná reprezentace skutečné hodnoty, lze měřítko často ignorovat, dokud se hodnota nemusí vrátit do „skutečného světa“. Například, přidávání dvě škálované hodnoty jsou stejně platné jako změna měřítka hodnot, přidání skutečných hodnot a poté změna měřítka výsledku, přičemž první je mnohem jednodušší a rychlejší. V obou případech však musí být dvě přidaná čísla změněna stejně.[3] U ostatních operací je změna měřítka velmi důležitá.

Například při multiplikaci je třeba vzít v úvahu, že jsou zmenšena obě čísla. Jako příklad zvažte dvě hodnoty skutečného světa A a B. Skutečný svět násobení těchto hodnot skutečného světa je:

A * B = P

Pokud jsou místo toho reprezentovány faktorem měřítka Z, a tato zmenšená reprezentace se následně znásobí, výsledkem je následující:

AZ * BZ = Q

AZ je hodnota skutečného světa v měřítku A, nebo jednoduše produkt z A * Z, a podobně, B Z je zmenšené zobrazení B. Po škálovaném násobení není odpověď zapsána PZ, protože hodnota uložená v PZ je ne odpověď. To lze vidět přeuspořádáním příkazu, kde každý řádek v následujícím textu je ekvivalentní:

AZ * BZ = QA * Z * B * Z = Q (A * B) * Z * Z = QP * Z * Z = QPZ * Z = Q

V řádku 4, P náhražky A * B. Z toho vyplývá, že výsledek AZ * BZ (který je Q) je ne PZ, ale raději PZ * Z. Li PZ Byly odpovědí, mohlo by to být uloženo přímo, protože má vestavěný faktor měřítka, jako je tomu v případě sčítání a odčítání. Pro násobení má však produkt dvou škálovaných hodnot zabudované další škálování. Pokud se to vezme v úvahu, stále není potřeba převádět AZ a B Z do A a B před provedením operace; výsledek musí být vydělen Z před uložením zpět. Po tomto, PZ bude uložen jako výsledek násobení, což je ve skutečnosti měřítková reprezentace výsledku A * B (požadovaná odpověď) spíše než výsledek AZ * BZ (který je stále zmenšen).

Běžné scénáře škálování

Frakční hodnoty v měřítku na celá čísla

Jak již bylo popsáno, mnoho starších procesorů (a možná i některých současných) nativně nepodporuje zlomkovou matematiku. V tomto případě lze zlomkové hodnoty škálovat na celá čísla vynásobením deseti k síle čehokoli desetinný je požadována přesnost. Jinými slovy zachovat n číslice napravo od desetinná čárka, je nutné vynásobit celé číslo 10n. V počítačích, které provádějí výpočty v binární podobě, se reálné číslo vynásobí 2m zachovat m číslice napravo od binární bod; alternativně lze bitový posun hodnota m místa vlevo. Například v následující sadě zlomkových hodnot reálného světa mají všechny tři číslice vpravo od desetinné čárky:

15.400, 0.133, 4.650, 1.000, 8.001

Chcete-li uložit všechny tyto informace (jinými slovy, žádné neztratit přesnost ), tato čísla musí být vynásobena 103 (1 000), udávající celočíselné hodnoty:

15400, 133, 4650, 1000, 8001

Kvůli hodnotě zmenšených čísel nemohou být uložena v 8bitových celých číslech; budou vyžadovat nejméně 14 nepodepsaných bitů, nebo realističtěji 16.

Celé číslo na zlomky

Určité procesory, zejména DSP běžné v vestavěný systém průmysl zabudovali podporu pro aritmetika s pevným bodem, jako Q a IQ formáty.

Protože zlomková část čísla zabírá některé bity v poli, rozsah hodnot možných v hodnotě fixed9point je menší, než by stejný počet bitů poskytoval celému číslu.[4] Například v 8bitovém poli může celé číslo bez znaménka ukládat hodnoty od [0, 255], ale nepodepsaný pevný bod s 5 bity přidělenými zlomkové části má pro celočíselnou hodnotu jen 3 bity, a tak může ukládat pouze celočíselné hodnoty z [0, 7]. (Počet různých hodnot, které mohou dvě pole uložit, je stejný, 28 = 256, protože pole s pevným bodem může také uložit 32 zlomkových hodnot pro každou celočíselnou hodnotu.) Je proto běžné, že se k uložení skutečných hodnot, které mohou být větší než maximální hodnota formátu pevného bodu, používá měřítkový faktor. .

Jako příklad lze uvést, že při použití nepodepsaného 8bitového formátu pevného bodu (který má 4 celočíselné bity a 4 zlomkové bity) je nejvyšší reprezentovatelná celočíselná hodnota 15 a nejvyšší reprezentovatelná smíšená hodnota 15,9375 (0xF.F nebo 1111.1111b). Pokud jsou požadované hodnoty reálného světa v rozsahu [0,160], musí být upraveny tak, aby se vešly do této reprezentace pevného bodu. Faktor měřítka110 nemůže zde lze použít, protože měřítko 160 o110 dává 16, což je větší než největší hodnota, kterou lze uložit v tomto formátu s pevným bodem. Nicméně111 bude fungovat jako měřítkový faktor, protože maximální škálovaná hodnota,16011 = 14.54, zapadá do tohoto rozsahu. Vzhledem k této sadě:

154, 101, 54, 3, 0, 160

Škálování těchto faktorem měřítka111 dává následující hodnoty:

154/11 = 14101/11 = 9.1818...54/11 = 4.9090...3/11 = 0.2727...0/11 = 0160/11 = 14.5454...

Mnoho z těchto hodnot bylo zkráceno, protože obsahují opakování desetinných míst, což vyplývá ze zvoleného měřítka (jedenáctina nekončí desetinně). Při ukládání v našem formátu s pevnou řádovou čárkou dojde ke ztrátě určité přesnosti (na rozdíl od přesných hodnot původních celých čísel). To je také problém, protože 8bitový formát může ukládat 256 různých hodnot, ale čísla v této sadě jsou z rozsahu pouze s 161 možnými hodnotami (0 až 160). Jak se ukázalo, problémem byl faktor měřítka,111, který zavedl zbytečné požadavky na přesnost a chyba zaokrouhlování (při přibližování skutečné hodnoty nejbližší reprezentovatelné hodnotě).[5] Abyste se tomuto problému vyhnuli nebo jej vyřešili, musíte zvolit lepší měřítko.

Volba měřítka

Výše uvedený příklad ukazuje, jak mohou určité měřítkové faktory způsobit zbytečnou ztrátu přesnosti nebo chybu zaokrouhlování, přičemž zdůrazňuje důležitost výběru správného měřítkového faktoru. Pomocí měřítka z111 a převodem na binární reprezentace se získají následující hodnoty:

154/11 = 14 = 1110.0101/11 = 9.1818... = 1001.00101110...54/11 = 4.9090... = 100.111010...3/11 = 0.2727... = 0.010010...0/11 = 0 = 0.0160/11 = 14.5454... = 1110.10010...

Některé z binárních zlomků vyžadují více než čtyři zlomkové bity poskytované nastaveným formátem pevné body. (To je z části proto, že ani jedenáctka nekončí v binárním formátu.) Aby se vešly do polí (4 celé číslo a 4 zlomkové bity), je možné zbývající bity zkrátit a poskytnout následující uložené reprezentace:

1110.00001001.00100100.11100000.01000000.00001110.1001

Nebo v desítkové soustavě:

14.09.1254.8750.250.014.5625

Když jsou povoláni zpět do reálného světa, jsou rozděleni faktorem měřítka,111. To je inverzní původního měřítka, což dává následující hodnoty „skutečného světa“:

154.0100.37553.6252.750160.1875

Tyto hodnoty nejsou ekvivalentní originálům (před zmenšením a přizpůsobením této 8bitové reprezentaci). Nejpozoruhodnější je, že už nejsou všechna celá čísla, což okamžitě naznačuje, že v úložišti byla zavedena chyba kvůli špatnému výběru měřítka.

Výběr lepšího měřítka

Většina datové sady nebude mít dokonalý měřítkový faktor; s největší pravděpodobností dojde při procesu změny měřítka k nějaké chybě. Je však možné zvolit lepší měřítkový faktor. Ideální měřítko nemusí být nejmenší, ale spíše takový, který zachovává co největší přesnost.

Dělení čísla mocninou dvou je stejné jako posunutí všech bitů doprava jednou pro každou mocninu dvou. (Toto je binární ekvivalent posunutí všech desetinných míst doleva nebo doprava, když se násobí nebo dělí mocninami deseti.) Vzor bitů se nezmění, pouze posune počet míst rovných binárnímu exponentu ( například 3 místa vpravo při dělení 8 = 23). Na druhou stranu, při dělení číslem, které není celočíselnou mocninou dvou v binární podobě, se bitový vzor změní. To pravděpodobně vytvoří bitový vzor s více bity napravo od binárního bodu, čímž se uměle zavede požadovaná přesnost. To platí zejména tehdy, když má zlomková část jmenovatele, který není mocninou dvou, protože všechny zlomky nikoli reciproční pravomocí dvou se opakuje v binární podobě.[6] Proto je téměř vždy lepší použít měřítkový faktor, který je mocninou dvou. Stále může být možné ztratit bity, které se v důsledku zkrácení posunou hned na konci pole, ale nedojde k zavedení Nový bity, které budou nepřesné (kvůli chybě zaokrouhlování) nebo zkráceny.[6]

Pro ilustraci je možné použít mocniny dvou v měřítku, měřítko v hodnotě116 lze použít na výše uvedený soubor dat. Binární hodnoty pro původní soubor dat jsou uvedeny níže:

154 = 1001 1010101 = 0110 010154 =  0011 01103 =   0000 00110 =   0000 0000160 = 1010 0000

Protože jsou celá čísla mezi 0 a 255, lze je přesně znázornit 8 bity. Škálování těchto podle116 je stejné jako dělení 16, což je stejné jako posunutí bitů o 4 místa doprava. V tomto případě se změna měřítka provádí vložením binárního bodu mezi první 4 bity a poslední 4 bity každého čísla. To se stane rovné předem určenému formátu této reprezentace. V důsledku toho, protože všechna tato čísla nevyžadují více než 8 bitů, aby je bylo možné reprezentovat jako celá čísla, není zapotřebí více než 8 bitů pro jejich zmenšení a uložení ve formátu s pevným bodem.

Viz také

Reference

  1. ^ Linec 2003, s. 12–13.
  2. ^ Linec 2003, s. 14–15.
  3. ^ Yates 2013, str. 6.
  4. ^ Yates 2013, s. 4–5.
  5. ^ Linec 2013, str. 18.
  6. ^ A b „Binární zlomky“. Floating-point-gui.de. Citováno 6. července 2020.