Formát čísla počítače - Computer number format

Formát čísla Počítač je vnitřní reprezentace číselných hodnot v digitální hardware zařízení a software, jako například v programovatelných počítačů a kalkulaček . Číselné hodnoty se ukládají jako seskupení bitů , například bajty a slova. Kódování mezi číselnými hodnotami a bitovými vzory je zvoleno pro usnadnění provozu počítače; kódování používané sadou instrukcí počítače obecně vyžaduje převod pro externí použití, například pro tisk a zobrazení. Různé typy procesorů mohou mít různé interní reprezentace číselných hodnot a pro celočíselná a reálná čísla se používají různé konvence. Většina výpočtů se provádí s formáty čísel, které se vejdou do registru procesoru, ale některé softwarové systémy umožňují reprezentaci libovolně velkých čísel pomocí více slov paměti.

Reprezentace binárního čísla

Počítače představují data v sadách binárních číslic. Reprezentace se skládá z bitů, které jsou zase seskupeny do větších sad, jako jsou bajty.

Tabulka 1: Binární až osmičkové
Binární řetězec Osmičková hodnota
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
Tabulka 2: Počet hodnot pro bitový řetězec.
Délka bitového řetězce (b) Počet možných hodnot (N)
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 1024
...

Bit je binární číslice , která představuje jeden ze dvou stavů . Pojmu bit lze chápat jako hodnotu buď 1 nebo 0 , zapnutou nebo vypnutou , ano nebo ne , pravdivou nebo nepravdivou , nebo kódovanou nějakým přepínačem nebo přepínačem .

Zatímco jediný bit je sám o sobě schopen představovat pouze dvě hodnoty, řetězec bitů může být použit k reprezentaci větších hodnot. Například řetězec tří bitů může představovat až osm různých hodnot, jak je znázorněno v tabulce 1.

Jak se zvyšuje počet bitů tvořících řetězec, exponenciálně se zvyšuje počet možných kombinací 0 a 1 . Jeden bit umožňuje pouze dvě kombinace hodnot, dva kombinované bity mohou vytvořit čtyři samostatné hodnoty, tři bity pro osm atd., Které se zvyšují pomocí vzorce 2 ^ n. Počet možných kombinací se zdvojnásobuje s každou přidanou binární číslicí, jak je znázorněno v tabulce 2.

Seskupení se specifickým počtem bitů se používají k reprezentaci různých věcí a mají konkrétní názvy.

Byte je bitový řetězec, který obsahuje počet bitů potřebných k reprezentaci znaku . Na většině moderních počítačů se jedná o osmibitový řetězec. Protože definice bajtu souvisí s počtem bitů tvořících znak, některé starší počítače používaly pro svůj bajt jinou délku bitu. V mnoha počítačových architekturách je byte nejmenší adresovatelnou jednotkou , řekněme atomem adresovatelnosti. Například i když 64bitové procesory mohou adresovat paměť šedesát čtyři bitů najednou, mohou tuto paměť stále rozdělit na osmibitové kousky. Tomu se říká byte-adresovatelná paměť. Historicky mnoho procesorů čte data v několika násobcích osmi bitů. Protože velikost bajtu osmi bitů je tak běžná, ale definice není standardizovaná, termín oktet se někdy používá k explicitnímu popisu osmibitové sekvence.

Čtyři bity (někdy Nybble ), je číslo složen ze čtyř bitů. Být půl bajtu se okusovat byl jmenován jako hra se slovy. Člověk může potřebovat několik kousnutí na jedno sousto z něčeho; podobně je nybble součástí bajtu. Protože čtyři bity umožňují šestnáct hodnot, je nibble někdy známý jako šestnáctková číslice .

Osmičkové a šestnáctkové číslo

Osmičkové a hexadecimální kódování jsou pohodlné způsoby, jak reprezentovat binární čísla, jak je používají počítače. Počítačoví inženýři často potřebují zapisovat binární veličiny, ale v praxi je odpis binárního čísla jako 1001001101010001 zdlouhavý a náchylný k chybám. Proto jsou binární veličiny zapisovány ve formátu base-8 nebo „octal“, nebo mnohem častěji ve formátu base-16, „hexadecimálním“ ( hex ), číselném formátu. V desítkové soustavě je 10 číslic, 0 až 9, které se kombinují a tvoří čísla. V osmičkové soustavě je pouze 8 číslic od 0 do 7. To znamená, že hodnota osmičkové „10“ je stejná jako desetinná „8“, osmičková „20“ je desítková „16“, a tak na. V hexadecimálním systému je 16 číslic, 0 až 9 následovaných konvencí, s A až F. To znamená, že hexadecimální číslo „10“ je stejné jako desetinné číslo „16“ a hexadecimální číslo „20“ je stejné jako desetinné číslo „32“. Příklad a srovnání čísel v různých základnách je popsáno v tabulce níže.

Při psaní čísel se k popisu číselného systému používají formátovací znaky, například 000_0000B nebo 0b000_00000 pro binární a 0F8H nebo 0xf8 pro hexadecimální čísla.

Konverze mezi základnami

Tabulka 3: Porovnání hodnot v různých základnách
Desetinný Binární Osmičkový Hexadecimální
0 000000 00 00
1 000001 01 01
2 000010 02 02
3 000011 03 03
4 000100 04 04
5 000101 05 05
6 000110 06 06
7 000111 07 07
8 001000 10 08
9 001001 11 09
10 001010 12 0A
11 001011 13 0B
12 001100 14 0C
13 001101 15 0D
14 001110 16 0E
15 001111 17 0F

Každý z těchto číselných systémů je poziční systém, ale zatímco desítkové váhy jsou mocniny 10, osmičkové váhy jsou mocniny 8 a hexadecimální váhy jsou mocniny 16. Chcete-li převést z hexadecimální nebo osmičkové na desítkovou, vynásobí každá číslice hodnotu číslice o hodnotu její polohy a poté přidá výsledky. Například:

Reprezentující zlomky v binární podobě

Čísla s pevným bodem

Formátování s pevným bodem může být užitečné k reprezentaci zlomků v binárním formátu.

Počet bitů potřebných pro požadovanou přesnost a rozsah musí být zvolen pro uložení zlomkové a celočíselné části čísla. Například při použití 32bitového formátu lze použít 16 bitů pro celé číslo a 16 pro zlomek.

Po osmičkovém kousku následuje čtyřkový kousek, potom kousek dvou, poté kousek něčí. Frakční bity pokračují ve vzoru nastaveném celočíselnými bity. Další bit je bit poloviny, poté bit čtvrtiny, bit ⅛ atd. Například:

celočíselné bity zlomkové bity
0,500 = 1 / 2 = 00000000 00000000.10000000 00000000
1250 = 1 + 1 / 4 = 00000000 00000001,01000000 00000000
7,375 = 7 + 3 / 8 = 00000000 00000111.01100000 00000000

Tato forma kódování nemůže představovat některé hodnoty v binárním formátu. Například zlomek 1 / 5 , 0,2 v desítkové soustavě, nejbližší aproximace by byla následující:

13107/65536 = 00000000 00000000,00110011 00110011 = 0,199 9999 ... v desítkové soustavě
13108/65536 = 00000000 00000000,00110011 00110100 = 0,2000122 ... v desítkové soustavě

I když je použito více číslic, je přesná reprezentace nemožná. Číslo 1 / 3 , zapsaný v desítkové soustavě jako 0,333333333 ..., pokračuje neurčitě. Pokud by byl předčasně ukončen, hodnota by nepředstavovala 1 / 3 přesně.

Čísla s plovoucí desetinnou čárkou

Zatímco v digitálních systémech se používají celá čísla bez znaménka i se znaménkem, ani 32bitové celé číslo nestačí ke zpracování celé škály čísel, které kalkulačka zvládne, a to nezahrnuje ani zlomky. Abychom přiblížili větší rozsah a přesnost reálných čísel , musíme opustit celá čísla se znaménkem a čísla s pevnou řádovou čárkou a přejít na formát „s plovoucí desetinnou čárkou “.

V desítkové soustavě známe čísla s plovoucí desetinnou čárkou ve tvaru ( vědecká notace ):

1,1030402 × 10 5 = 1,1030402 × 100000 = 110304,02

nebo, kompaktněji:

1.1030402E5

což znamená „1,1030402 krát 1 následovaných 5 nulami“. Máme určitou číselnou hodnotu (1,1030402) známou jako „ význam “, vynásobenou mocí 10 (E5, což znamená 10 5 nebo 100 000), známou jako „ exponent “. Pokud máme záporný exponent, znamená to, že číslo je vynásobeno 1, která je na mnoha místech napravo od desetinné čárky. Například:

2,3434E − 6 = 2,3434 × 10 −6 = 2,3434 × 0,000001 = 0,0000023434

Výhodou tohoto schématu je, že pomocí exponentu můžeme získat mnohem širší rozsah čísel, i když je počet číslic v významě nebo „numerická přesnost“ mnohem menší než rozsah. Podobné binární formáty s plovoucí desetinnou čárkou lze definovat pro počítače. Existuje celá řada takových schémat, nejpopulárnější definoval Institute of Electrical and Electronics Engineers (IEEE). IEEE 754-2008 Standardní specifikace definuje 64 bitový formát s plovoucí desetinnou čárkou s:

  • 11bitový binární exponent používající formát „over-1023“. Přebytek-1023 znamená, že exponent se jeví jako nepodepsané binární celé číslo od 0 do 2047; odečtením 1023 získáte skutečnou podepsanou hodnotu
  • 52-bitový význam, také nepodepsané binární číslo, definující zlomkovou hodnotu s úvodní implikovanou „1“
  • znakový bit, který dává znaménko čísla.

Podívejme se, jak tento formát vypadá, tím, že ukážeme, jak by takové číslo bylo uloženo do 8 bajtů paměti:

byte 0 S x10 x9 x8 x7 x6 x5 x4
bajt 1 x3 x2 x1 x0 m51 m50 m49 m48
bajt 2 m47 m46 m45 m44 m43 m42 m41 m40
bajt 3 m39 m38 m37 m36 m35 m34 m33 m32
bajt 4 m31 m30 m29 m28 m27 m26 m25 m24
bajt 5 m23 m22 m21 m20 m19 m18 m17 m16
bajt 6 m15 m14 m13 m12 m11 m10 m9 m8
bajt 7 m7 m6 m5 m4 m3 m2 m1 m0

kde „S“ označuje znaménkový bit, „x“ označuje exponentový bit a „m“ označuje signální bit. Jakmile jsou bity zde extrahovány, jsou převedeny pomocí výpočtu:

<sign> × (1 + <frakční význam>) × 2 <exponent> - 1023

Toto schéma poskytuje čísla platná až na 15 desetinných míst s následujícím rozsahem čísel:

maximum minimální
pozitivní 1.797693134862231E + 308 4.940656458412465E-324
záporný -4,940656458412465E-324 -1,797693134862231E + 308

Specifikace také definuje několik speciálních hodnot, které nejsou definovanými čísly a jsou známé jako NaN pro „Not A Number“. Používají je programy k označení neplatných operací a podobně.

Některé programy také používají 32bitová čísla s plovoucí desetinnou čárkou. Nejběžnější schéma používá 23bitový význam se znaménkovým bitem a 8bitový exponent ve formátu „nadměrný-127“, který udává sedm platných desetinných míst.

byte 0 S x7 x6 x5 x4 x3 x2 x1
bajt 1 x0 m22 m21 m20 m19 m18 m17 m16
bajt 2 m15 m14 m13 m12 m11 m10 m9 m8
bajt 3 m7 m6 m5 m4 m3 m2 m1 m0

Bity jsou převedeny na číselnou hodnotu pomocí výpočtu:

<sign> × (1 + <frakční význam>) × 2 <exponent> - 127

což vede k následujícímu rozsahu čísel:

maximum minimální
pozitivní 3,402823E + 38 2.802597E-45
záporný -2,802597E-45 -3,402823E + 38

Taková čísla s plovoucí desetinnou čárkou jsou obecně známá jako „reals“ nebo „floats“, ale s řadou variací:

32bitová plovoucí hodnota se někdy nazývá „real32“ nebo „single“, což znamená „hodnota s plovoucí desetinnou čárkou s jednou přesností“.

64bitový plovák se někdy nazývá „real64“ nebo „double“, což znamená „hodnota s plovoucí desetinnou čárkou s dvojitou přesností“.

Vztah mezi čísly a bitovými vzory je zvolen pro pohodlí při manipulaci s počítačem; osm bajtů uložených v paměti počítače může představovat 64bitový reálný, dva 32bitové reálné nebo čtyři podepsaná nebo nepodepsaná celá čísla nebo nějaký jiný druh dat, který se vejde do osmi bajtů. Jediný rozdíl je v tom, jak je počítač interpretuje. Pokud by počítač uložil čtyři celá čísla bez znaménka a poté je přečetl zpět z paměti jako 64bitové reálné, téměř vždy by to bylo dokonale platné reálné číslo, i když by to byla nevyžádaná data.

Pouze konečný rozsah reálných čísel může být reprezentován daným počtem bitů. Aritmetické operace mohou přetékat nebo podtečovat a vytvářet hodnotu příliš velkou nebo příliš malou na to, aby byla reprezentována.

Reprezentace má omezenou přesnost. Například pouze 15 desetinných míst lze reprezentovat 64bitovým reálným. Pokud je k velkému číslu přidáno velmi malé číslo s plovoucí desetinnou čárkou, výsledkem bude jen velké číslo. Malý počet byl příliš malý na to, aby se dokonce zobrazil v rozlišení 15 nebo 16 číslic, a počítač jej účinně zahodil. Analýza účinku omezené přesnosti je dobře prostudovaný problém. Odhady velikosti zaokrouhlovacích chyb a metody omezující jejich účinek na velké výpočty jsou součástí každého velkého výpočetního projektu. Mez přesnosti se liší od meze rozsahu, protože ovlivňuje význam, nikoli exponent.

Význam je binární zlomek, který nemusí nutně dokonale odpovídat desetinnému zlomku. V mnoha případech součet vzájemných mocnin 2 neodpovídá konkrétnímu desetinnému zlomku a výsledky výpočtů budou mírně vypnuty. Například desetinný zlomek „0,1“ odpovídá nekonečně se opakujícímu binárnímu zlomku: 0,000110011 ...

Čísla v programovacích jazycích

Programování v montážním jazyce vyžaduje, aby programátor sledoval reprezentaci čísel. Pokud procesor nepodporuje požadovanou matematickou operaci, musí programátor k provedení operace vypracovat vhodný algoritmus a sekvenci instrukcí; na některých mikroprocesorech musí být dokonce i celočíselné násobení provedeno v softwaru.

Programovací jazyky na vysoké úrovni, jako jsou Ruby a Python, nabízejí abstraktní číslo, které může být rozšířeným typem, jako je racionální , bignum nebo komplexní . Matematické operace jsou prováděny knihovními rutinami poskytovanými implementací jazyka. Daný matematický symbol ve zdrojovém kódu přetížením operátoru vyvolá jiný objektový kód odpovídající reprezentaci číselného typu; matematické operace s jakýmkoli číslem - ať už podepsané, nepodepsané, racionální, s plovoucí desetinnou čárkou, pevnou řádovou čárkou, integrálem nebo komplexem - jsou psány přesně stejným způsobem.

Některé jazyky, například REXX a Java , poskytují operace s desetinnými plovoucími čárkami, které poskytují chyby zaokrouhlování jiné formy.

Viz také

Poznámky a odkazy

Počáteční verze tohoto článku byla založena na článku ve veřejné doméně od Vektora Grega Goebela .