S plovoucí desetinnou čárkou je způsob psaní čísel běžně používané v počítačích , podobně jako matematický zápis v binárním zápisu . Skládá se z reprezentace čísla:
Takový triplet představuje číslo
znaménko × mantisa × základ exponentu
Reprezentační základna je obvykle 2 na počítači, ale také 8 nebo 16 na některých starých počítačích, 10 na mnoha kalkulačkách nebo případně jiná hodnota. Změnou exponentu „ploveme“ čárku. Mantisa je posloupnost čísel v základně b , obvykle pevné velikosti. Hodnota „exponentu“ označuje multiplikátor, tj. Pozici virtuální desetinné čárky.
Plovoucí desetinná čárka je na rozdíl od reprezentace pevnou řádovou čárkou , která označuje celé číslo submultiple jednoty: "1234.567" je pohodlný způsob zápisu 1234 a 567 tisícin, nebo 1234567 tisícin.
Reprezentace s plovoucí desetinnou čárkou může se stejným počtem bitů zpracovat větší číselný interval.
Rozsah (s desetinnými místy):Desetinná reprezentace s pevnou desetinnou čárkou se 7 desetinnými místy, včetně 2 za desetinnou čárkou, může představovat čísla 12345,67, 123,45, 1,23 atd.
Plovoucí bod desetinná reprezentace (jako je formát IEEE 754 decimal32) může, se stejným počtem desetinných míst, dále znamenat 1,234567, 123456,7 = 1,234567 x 10 5 , ,00001234567 = 1,234567 x 10 -5 , 1234567000000000 = 1,234567 x 10 15 , atd .
Reprezentace s plovoucí desetinnou čárkou zachovává přesnost. Mantisa má vždy stejný počet platných číslic bez úvodní nuly.
Přesnost (s desetinnými místy):Desetinná reprezentace s pevnou desetinnou čárkou se 7 desetinnými číslicemi včetně 2 za desetinnou čárkou má nejvýše 7 platných číslic: 10 000,00 ÷ 00700,00 = 00014,28.
Desetinná reprezentace s plovoucí desetinnou čárkou (jako formát IEEE 754 decimal32) může při stejném počtu číslic v mantisě udržovat přesnost: 1,000000 × 10 5 ÷ 7,000000 × 10 2 = 1,428561 × 10 1 .
Plovoucí desetinná čárka se používá k definování limitu relativní chyby aproximace nebo epsilon stroje .
Tato výhoda se vyplácí obsazením většího prostoru, protože je nutné zakódovat polohu čárky (představovanou exponentem). Trvá také více výpočtů k provedení operací, které se již netýkají celého čísla, ale dvou nebo tří, pokud vezmeme v úvahu znaménko.
Když, jak je nejčastěji případ, číslo s plovoucí čárkou se používá při výpočtu, je implicitně považován za přiblížení z reálného čísla . Přesnost této aproximace je přesnost mantisy, jejíž první číslice může být nulová, pouze když je exponent co nejnegativnější. Číslo s plovoucí desetinnou čárkou představuje real, jehož hodnota je zahrnuta v intervalu kolem celočíselné hodnoty mantisy, stejně široká jako rozdíl mezi dvěma po sobě následujícími hodnotami této.
Matematicky je hodnota číselného výrazu s plovoucí desetinnou čárkou spojitá sada reálných čísel, jejichž pravidla zaokrouhlování přesně definují limity.
Na rozdíl od toho, co se stane v množině reálných čísel, není sčítání pro čísla s plovoucí desetinnou čárkou asociativní .
Přidání plováků není asociativní: důležitost pořadí výpočtu:Předpokládejme, že musíme sečíst seznam čísel se třemi desetinnými mantisami. 1.12e2 zní „bod dvanáct vynásobený desítkou k síle dvou“, nebo 112, a:
1,12e2; 2,00e-1; 7,50e1; 3,00e-1; 3,07e-1; 4,00 e-1; 2.17e0.V sčítání s plovoucí desetinnou čárkou ovlivní výsledek pouze čísla, která mohou být reprezentována nenulovou mantisou s největším exponentem.
Výsledkem je, že výpočet šíření nejistot se vztahuje pouze na výpočet na datech, který musí být mnohem větší než přesnost výpočtu.
Výraz čísla v systému s plovoucí desetinnou čárkou nelze vždy přesně vyjádřit v jiném systému s plovoucí desetinnou čárkou s jinou základnou.
Převod desetinné plovoucí desetinné čárky na binární plovoucí desetinnou čárku:Často se objevují případy desetinných míst čísla vyjádřeného vědeckou notací, desetinnou, binární plovoucí desetinnou čárkou, používanou počítači. Vynutí to zaokrouhlení, jak ukazuje příklad hodnoty 0,1, to znamená zlomek 1/10.
Binární čísla s plovoucí desetinnou čárkou vyjadřují hodnotu celým číslem, mantisou, vynásobenou nebo dělenou mocí dvou. Žádný zlomek, bez ohledu na jmenovatele 2 n , se nerovná 1/10 - stejně jako 1/3 není vyjádřena žádným desetinným číslem. Je nutně nutné zaokrouhlení.
Sada čísel představovaná ve formě čísla s plovoucí desetinnou čárkou nebo sada s plovoucí desetinnou čárkou je konečná množina, jejíž počet závisí na reprezentaci základny a počtu číslic pro mantisu a exponenta.
Počet číslic v mantisce a číselná základna - například binární nebo desítková - definují aritmetickou přesnost . Rozdíl mezi 1 a jeho následníkem v sadě plováků obvykle definuje epsilon systému s plovoucí desetinnou čárkou.
Sada plováků není stabilní při působení obvyklých aritmetických operací. Výsledek operace by měl být vždy součástí celku; ale je časté, že výsledek aritmetické operace nelze vyjádřit se stejným počtem číslic jako její operandy. Abychom získali stabilitu, musíme přidat zaokrouhlovací funkci.
Rychlost operací s plovoucí desetinnou čárkou, běžně označovaná jako FLOPS při měření výkonu, je důležitou charakteristikou strojů, zejména v softwaru, který provádí matematické výpočty ve velkém měřítku.
Postupem času se objevila řada reprezentací s plovoucí desetinnou čárkou, která z důvodu rozdílů v interních reprezentacích a chování plovoucích čísel znemožňovala přenos vědeckých počítačových programů z jednoho stroje na druhý. Z tohoto důvodu IEEE implementovalo standard v roce 1985, IEEE 754 .
Standard IEEE 754 z roku 1985 (převzatý mezinárodní normou IEC 60559) specifikuje dva formáty čísel s plovoucí desetinnou čárkou (a dva volitelné rozšířené formáty) v základně 2, stejně jako některé související operace: hlavně sčítání, odčítání, násobení, dělení a druhou mocninu vykořenit. Téměř všechny současné počítačové architektury , včetně IA32 , PowerPC a AMD64 , obsahují hardwarovou implementaci výpočtů float IEEE přímo v mikroprocesoru, což zajišťuje rychlé provedení.
Dva formáty stanovené standardem IEEE 754 jsou 32bitový („single-precision“, v revizi 2008 přejmenovaný na binary32) a 64bitový („double-precision“, v revizi 2008 přejmenovaný na binary64). Rozložení bitů je následující, kde 1 ≤ M <2:
Přesnost | Kódování | S ine | E xposant | M antisse | Hodnota čísla | Přesnost | Významné údaje |
---|---|---|---|---|---|---|---|
Jednoduchá přesnost | 32 bitů | 1 bit | 8 bitů | 23 bitů | 24 bitů | asi 7 | |
Dvojitá přesnost | 64 bitů | 1 bit | 11 bitů | 52 bitů | 53 bitů | asi 16 |
Tabulka výše označuje zobrazené bity. Protože první bit mantisy normalizovaného čísla je vždy 1, není reprezentován v žádném z těchto dvou formátů: mluvíme o implicitním bitu. U těchto dvou formátů jsou tedy přesnosti 24, respektive 53 bitů.
Pro kódování speciálních čísel jsou vyhrazeny dvě hodnoty pole Exponent: denormalizovaná čísla a nula se znaménkem na jedné straně, nekonečna a NaN ( Not-a-Number ) na straně druhé. Ostatní definují dynamiku reprezentace: 8 bitů umožňuje měnit pořadí v průběhu 256 binad (in) nebo 76 dekád.
Kromě reprezentace standard specifikuje přesně chování podporovaných operací: tyto musí být správně zaokrouhleny v jednom ze 4 vybraných režimů zaokrouhlování.
Tato norma byla revidována v roce 2000 vést k vydání nového standardu v roce 2008. Byly definovány nové formáty („čtyřnásobná přesnost“ nebo binární 128 a desítkové formáty), zobecněn pojem rozšířeného formátu a byly zavedeny nové operace. jako je FMA ; jsou doporučeny hlavní základní funkce.
Několik zpracovatelé Fortran a další jazyky mohou být volána s automatickou dvojitou přesností možnost , který nutí všechny plováky v programu na dvojitou přesností a eliminuje nutnost zdlouhavého přezkumu, který může vést k chybám.
Některé implementace přidávají jeden nebo více formátů s vyšší přesností; tak, IA-32 a IA-64 mají prodloužený 80-bitový formát. Standard IEEE 754-1985 poskytuje minimální velikosti pro tyto rozšířené formáty:
Přesnost | S ine | E xposant | M antisse |
---|---|---|---|
Jednoduchá rozšířená přesnost | 1 bit | 11 bitů nebo více | 32 bitů nebo více |
Dvojitá rozšířená přesnost | 1 bit | 15 bitů nebo více | 64 bitů nebo více |
Tyto „rozšířené“ reprezentace nutně nepoužívají implicitní bit mantisy.
V praxi se stále používá pouze rozšířená dvojitá přesnost ve své minimální podobě (1 + 15 + 64 = 80 bitů, rozšířený formát výše zmíněné IA32), s výjimkou formátů s vyšší přesností (například dvojitá přesnost jako rozšířená jednoduchá přesnost a čtyřnásobná přesnost jako rozšířená dvojitá přesnost).
V aritmetice s plovoucí desetinnou čárkou IEEE může výpočet vést k hodnotám, které neodpovídají číslům:
Když požadovaná přesnost výsledku překročí přesnost aritmetiky s plovoucí desetinnou čárkou dodanou strojem, může být nutné uchýlit se k výpočtům na plovácích s vyšší přesností. To je také nutné k provedení numericky nestabilních výpočtů .
Různé softwarové knihovny, stejně jako většina algebraických systémů , nabízejí libovolnou přesnou aritmetiku s plovoucí desetinnou čárkou , ve které může uživatel zvolit velikost mantisy. Citujme zejména knihovnu GNU MPFR , která implementuje základní aritmetické operace a mnoho obvyklých funkcí na plovácích v základně 2 libovolné přesnosti. Sémantika operací MPFR je inspirována standardem IEEE-754. Knihovna zejména zaručuje správné zaokrouhlování výsledků.
Výpočty s plovoucí desetinnou čárkou jsou pohodlné, ale mají řadu nevýhod, včetně:
Například je lákavé změnit uspořádání výrazů s plovoucí desetinnou čárkou, protože by se změnilo uspořádání matematických výrazů. To však není triviální:
Již v roce 1914, L. Torres y Quevedo snažil rozvíjet elektromechanickou verzi s Charles Babbage je analytický stroj a představovala provedení plovoucí přejděte výpočty.
O dvacet pět let později (v roce 1938) dokončil Konrad Zuse svůj první binární programovatelný mechanický počítač Z1 ; toto zařízení také používalo 24bitovou reprezentaci s plovoucí desetinnou čárkou, se znaménkem exponentem kódovaným na 7 bitech, mantisou kódovanou na 16 bitech (včetně jednoho implicitního bitu) a znaménkovým bitem . Spolehlivější kalkulačka Z3 k přenosu (1941) zavedla pojem nekonečného množství (kladného nebo záporného) ∞; to umožnilo dát nekonečné výsledky, jako jsou ty, které jsou výsledkem operací jako , a přerušilo to výpočty, když se zabývaly neurčitostmi , jako např . Zuse navrhl řídit všechny aritmetické výpočty zahrnující a neurčitost (NaN), čímž předvídal s čtyřicetiletým předstihem konvence, které budou integrovány do amerického standardu IEEE. Současně se matematik von Neumann postavil proti zavedení výpočtu s plovoucí desetinnou čárkou pro stroj IAS (1951).
Prvním komerčním počítačem s předem zapojenou kalkulačkou s plovoucí desetinnou čárkou byla Zuseova Z4 , vyvinutá v letech 1942 až 1945. V roce 1946 uvedla společnost Bell Laboratories na trh značku V, která implementuje aritmetiku v desetinné čárce.
Pilot ACE , britský prototyp vyvinutý v roce 1950 v National Physical Laboratory , okamžitě měl plovoucí řádovou čárkou. 33 z těchto počítačů prodala společnost English Electric pod názvem DEUCE. Ačkoli byla aritmetika jednoduše naprogramována a nebyla předem zapojena, existence hodin běžících na 1 MHz způsobila, že tento stroj byl v prvních letech rychlejší než jeho konkurenti.
IBM 704 , vyrobené v sérii, a následně v roce 1954; přinesl pojem exponent k posunu. V následujících desetiletích nebylo použití aritmetické a logické jednotky ( FPU ) s mikroskopickou plovoucí desetinnou čárkou (UAL) ničím jiným než volitelnou specifikací: o počítačích, které měly takovou součást, se říkalo, že jsou vědecké . Přechod z IBM 704 a 7044 na IBM 360 přinesl mnoho numerických problémů, protože kritická byla často plovoucí desetinná čárka s jednou přesností, snížená z 36 bitů na 32 bitů hexadecimálně.
Série počítačů UNIVAC 1100/2200 , která se objevila na trhu v roce 1962, měla dvě reprezentace s plovoucí desetinnou čárkou:
K 6500 Burroughs (en) používá mezitím plovoucí bod základny 8, 48 a 96 bitů.
Data Control 6600 použili plný mantisa 60-bitové binární s plovoucí řádovou čárkou.
Na minipočítačích zůstala plovoucí desetinná čárka dlouho naprogramována. Jednotka s plovoucí desetinnou čárkou se objeví na DEC na PDP11-34a v roce 1977 a v roce 1979 na Hewlett-Packard 21MXF (en) .
Teprve v roce 1989, kdy společnost Intel uvedla na trh mikroprocesor i486 , byly jednotlivé počítače konečně standardně vybaveny mikroprocesorem UAL s plovoucí desetinnou čárkou (matematické koprocesory x87 byly dříve volitelné).