Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Čísla s plovoucí desetinou čárkou používají formát IEEE (Institute of Electrical and Electronics Engineers). Hodnoty s jednoduchou přesností typu float mají 4 bajty, které se skládají z znaménka, 8bitového nadbytečného binárního exponentu 127 a 23bitové mantisy. Mantisa představuje číslo v rozmezí od 1,0 do 2,0. Vzhledem k tomu, že bit manissa s vysokým pořadím je vždy 1, není uložen v čísle. Tato reprezentace poskytuje rozsah přibližně 3,4E-38 až 3,4E+38 pro typ float.
Proměnné můžete deklarovat jako plovoucí nebo dvojité v závislosti na potřebách vaší aplikace. Hlavní rozdíly mezi těmito dvěma typy jsou významnost, kterou mohou představovat, úložiště, které vyžadují, a jejich rozsah. Následující tabulka ukazuje vztah mezi významností a požadavky na úložiště.
Typy s plovoucí desetinou čárkou
Typ | Významné číslice | Počet bajtů |
---|---|---|
float (číslo s plovoucí řádovou čárkou) | 6 - 7 | 4 |
double | 15 - 16 | 8 |
Proměnné s plovoucí desetinnou čárkou jsou reprezentovány mantisou, která obsahuje hodnotu čísla, a exponent, který obsahuje řád čísla.
Následující tabulka uvádí počet bitů přidělených mantisce a exponent pro každý typ s plovoucí desetinnou čárkou. Nejvýznamnější bit libovolné plovoucí nebo dvojité hodnoty je vždy znaménkový bit. Pokud je číslo 1, považuje se za záporné; jinak se považuje za kladné číslo.
Délky exponentů a mantisů
Typ | Délka exponentu | Délka mantisy |
---|---|---|
float (číslo s plovoucí řádovou čárkou) | 8 bitů | 23 bitů |
double | 11 bitů | 52 bitů |
Protože exponenty jsou uloženy v nepodepsané podobě, exponent je zkreslený o polovinu jeho možné hodnoty. Pro typ float je odchylka 127; pro typ double je 1023. Skutečnou exponentní hodnotu můžete vypočítat odečtením hodnoty zkreslení od exponentní hodnoty.
Mantisa je uložena jako binární zlomek větší nebo roven 1 a menší než 2. U typů float a double existuje implicitní vedoucí 1 v mantisisce v nejvýznamnější bitové pozici, takže manissasy jsou ve skutečnosti 24 a 53 bitů dlouhé, v uvedeném pořadí, i když nejvýznamnější bit není nikdy uložen v paměti.
Místo právě popsané metody úložiště může balíček s plovoucí desetinnou čárkou ukládat binární čísla s plovoucí desetinnou čárkou jako denormalizovaná čísla. Denormalizovaná čísla jsou nenulová čísla s plovoucí desetinnou čárkou s rezervovanými exponentovými hodnotami, ve kterých je nejvýznamnější bit mantisy 0. Pomocí denormalizovaného formátu je možné rozšířit rozsah čísla s plovoucí desetinnou čárkou za cenu přesnosti. Nelze určit, zda je číslo s plovoucí desetinnou čárkou reprezentováno v normalizované nebo denormalizované podobě; balíček s plovoucí desetinou čárkou určuje reprezentaci. Balíček s plovoucí desetinnou čárkou nikdy nepoužívá denormalizovaný formulář, pokud exponent nebude menší než minimum, které lze reprezentovat v normalizované podobě.
Následující tabulka uvádí minimální a maximální hodnoty, které můžete uložit do proměnných každého typu s plovoucí desetinou čárkou. Hodnoty uvedené v této tabulce se vztahují pouze na normalizovaná čísla s plovoucí desetinou čárkou; denormalizovaná čísla s plovoucí desetinnou čárkou mají menší minimální hodnotu. Všimněte si, že čísla zachovaná v registrech 80x87 jsou vždy reprezentována v 80bitové normalizované podobě. Čísla lze reprezentovat pouze v denormalizované podobě, pokud jsou uložena v 32bitových nebo 64bitových proměnných s plovoucí desetinnou čárkou (proměnné typu float a typu long).
Rozsah typů s plovoucí desetinou čárkou
Typ | Minimální hodnota | Maximální hodnota |
---|---|---|
float (číslo s plovoucí řádovou čárkou) | 1.175494351 E - 38 | 3.402823466 E + 38 |
double | 2.2250738585072014 E - 308 | 1.7976931348623158 E + 308 |
Pokud je přesnost menší než úložiště, zvažte použití typu float pro proměnné s plovoucí desetinnou čárkou. Naopak pokud je přesnost nejdůležitějším kritériem, použijte typ double.
Proměnné s plovoucí desetinou čárkou lze upřednostnět na typ větší významnosti (od typu float po typ double). K povýšení často dochází, když provádíte aritmetické proměnné s plovoucí desetinou čárkou. Tato aritmetika se vždy provádí ve vysoké míře přesnosti jako proměnná s nejvyšším stupněm přesnosti. Představte si například následující deklarace typu:
float f_short;
double f_long;
long double f_longer;
f_short = f_short * f_long;
V předchozím příkladu je proměnná f_short
povýšena na typ double a vynásobeno ; f_long
výsledek se zaokrouhlí na typ float před přiřazením f_short
.
V následujícím příkladu (který používá deklarace z předchozího příkladu) se aritmetika provádí s přesností float (32bitová) na proměnných; výsledek se pak upřednostní na typ double:
f_longer = f_short * f_short;